인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

프론트 컨트롤러 도입 - v1

Map에 들어가는 ControllerV1 객체

작성

·

539

0

는 싱글톤이 아닌 것인가요 ?

 

스프링 빈으로 저장도 안해줬고, static을 선언해서 클래스 변수도 아닌데 이럴 경우에는 호출 할 때마다

 

ControllerV1 객체가 생성되고 process를 진행되는 형식인가요 ?

답변 1

0

안녕하세요. hjemsti님, 공식 서포터즈 OMG입니다.
.

Map에 들어가는 ControllverV1객체라 하면

@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {

    private Map<String, ControllerV1> controllerMap = new HashMap<>();
    // 생성자 시작
    public FrontControllerServletV1() {
        controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
        controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1());
        controllerMap.put("/front-controller/v1/members", new MemberListControllerV1());
    }
    // 생성자 끝

위의 코드 중 생성자 부분을 말씀하시는걸까요?

FrontContollerServletV1이 서블릿 객체로 싱글톤으로 관리되며 따라서 객체 생성은 한번만 발생하며 재사용됩니다.

public class MemberFormControllerV1 implements ControllerV1 {
    public MemberFormControllerV1() {
        System.out.println("MemberFormControllerV1.MemberFormControllerV1");
    }
public class MemberListControllerV1 implements ControllerV1 {
    public MemberListControllerV1() {
        System.out.println("MemberListControllerV1.MemberListControllerV1");
    }
public class MemberSaveControllerV1 implements ControllerV1 {
    public MemberSaveControllerV1() {
        System.out.println("MemberSaveControllerV1.MemberSaveControllerV1");
    }

다음과 같이 생성자 부분에 출력 메서드를 하나 두어 어느 시점에 호출되는지(애플리케이션 로딩 시점 or 요청마다) 확인해보시면 이해에 도움되리라 생각합니다.

그리고 아래 영한님 설명 중 서블릿 객체에 대한 내용도 참고해주세요 ^^

https://www.inflearn.com/questions/830732/%EC%84%9C%EB%B8%94%EB%A6%BF-%EB%82%B4%EC%9E%A5%EA%B0%9D%EC%B2%B4-%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4


.
감사합니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기