인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

이승훈님의 프로필 이미지
이승훈

작성한 질문수

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

정리

DI 적용해보기

해결된 질문

작성

·

650

·

수정됨

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 타입을 주입하면 스프링의 모든 타입이 다 주입됩니다.

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

감사합니다.

이승훈님의 프로필 이미지
이승훈
질문자

아 그렇군요!

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

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

이승훈님의 프로필 이미지
이승훈

작성한 질문수

질문하기