코딩항해기

[Spring] springframework.HandlerMapping 구조 본문

Spring

[Spring] springframework.HandlerMapping 구조

miniBcake 2024. 10. 7. 17:34

 

 

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

 

DispatcherServlet이 의존성을 가지고 있는 두 가지 객체 중 하나인 HandlerMapping은 팩토리 패턴을 지킬 수 있도록 new를 줄여주고 호출 시 해당 객체를 반환해주는 역할을 한다. 

 

DispatcherServlet xml에 태그로 정의할 수 있는데, 이러한 구조를 가진다.

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <!--실습용은 SI로 주입-->
        <property name="mappings">
            <props>
                <!--<prop key="키 값 ">밸류 값</prop>-->
                <prop key="/login.do">login</prop>
                <prop key="/main.do">main</prop>
            </props>
        </property>
    </bean>

    <bean class="com.koreait.app.view.member.LoginController" id="login"/>
    <bean class="com.koreait.app.view.member.MainController" id="main"/>

 

이 구조를 java Class로 풀어보면 JSP 기반 프로젝트에서 사용했던 HandlerMapper와 동일한 형태가 된다.

public class HandlerMapping {
    private Map<String, Controller> mappings;

    //싱글톤을 유지할 수 있도록 미리 객체를 생성해 필요할 때마다 생성된 객체를 반환
    //팩토리 패턴을 지킨 사례 (new 절약)
    public HandlerMapping() {
        this.mappings = new HashMap<String, Controller>();

        this.mappings.put("/login.do", new LoginController());
        this.mappings.put("/main.do", new MainController());
    }

    //요청에 따라 객체를 반환
    public Controller getController(String command) {
        return mappings.get(command);
    }
}

 

Spring에서는 직접 만들지 않고 Springframework에서 제공하는 HandlerMapping을 사용한다는 차이를 가지고 있다.