• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

DI 적용해보기

23.02.16 17:02 작성 23.02.17 21:50 수정 조회수 560

0

안녕하세요. 항상 좋은 강의 감사합니다.

FrontController에서 어댑터들을 DI로 적용할 수 있다고 하셔서 이를 구현해보고자 하였습니다.

@WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*")
public class FrontControllerServletV5 extends HttpServlet {
    ...
    
    @Autowired
    private Map<String, Object> handlerMappingMap;
    
    ...
}

처음에 컬렉션 객체들을 Bean으로 등록하여 주입받고자 HandlerMappingConfig클래스를 만들었습니다.

@Configuration
public class HandlerMappingConfig {

    @Bean
    public Map<String, Object> handlerMappingMap() {

    Map<String, Object> handlerMappingMap = new HashMap<>();

        // V2 Controller
        handlerMappingMap.put("/front-controller/v5/v2/members/new-form",
            new MemberFormControllerV2());
        handlerMappingMap.put("/front-controller/v5/v2/members/save",
            new MemberSaveControllerV2());
        handlerMappingMap.put("/front-controller/v5/v2/members",
            new MemberListControllerV2());

        // V3 Controller & V4 Controller
        ...

        return handlerMappingMap;
    }
}

그리고 제대로 주입을 받았는지 테스트하기 위해 FrontControllerServletV5 클래스의 service() 메소드에서 handlerMappingMap을 출력하도록 작성하였습니다.

@WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*")
public class FrontControllerServletV5 extends HttpServlet {
    ...
    
    @Autowired
    private Map<String, Object> handlerMappingMap;
    
    ...
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        
        // 정상적으로 주입되었는지 테스트하기 위해 출력
        System.out.println("handlerMappingMap = " + handlerMappingMap);
        ...
    }
}

서버를 실행시켜 확인해보니 아래 그림과 같이 handlerMappingMap에 마치 컨테이너의 빈들이 다 들어온 것처럼 출력된 것을 확인할 수 있었습니다.

스크린샷 2023-02-16 오후 4.42.06.png왜 이런 현상이 나타나는지 모르겠습니다. 혹시 타입이 Map<String, Object>라 그런걸까요?

감사합니다.

 

답변 1

답변을 작성해보세요.

1

안녕하세요. 이승훈님

Object 타입을 주입하면 스프링의 모든 타입이 다 주입됩니다.

컨트롤러에 맞는 인터페이스 타입을 적어주세요.

감사합니다.

이승훈님의 프로필

이승훈

질문자

2023.02.18

아 그렇군요!

답변 달아주셔서 감사합니다...!!

한번 도전해 보겠습니다!!