태그 : mvc

스프링 설정 <mvc:annotation-driven/>이 구체적으로 뭘까?

오랜만에...라고 하기엔 정말 오랫동안 블로그에 글을 안 올렸는데 좌우간... 그렇게 오랫동안 안 올리다 올리는 글 치고는 손 안대고 코 푸는 수준의 글이지만 일단 다시 블로그질 좀 하려면 가볍게 시작하는 게 좋겠다는 생각이 들어서... 음...

암튼

스프링 3에 새로 추가된 mvc 네임 스페이스를 쓰면 아주 쉽게 @mvc xml 설정을 할 수는 있지만 속성을 변경할 수 없는 문제도 있다. 그래서 <mvc:annotation-driven>이 정확이 어떤 빈 설정을 의미하는지 찾아봤다.

소스 코드는 org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser.java 다.

결론은...

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="order" value="0" />
    </bean>
    
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
    <bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="webBindingInitializer">
            <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
                <property name="validator" ref="validator" />
                <property name="conversionService" ref="conversion-service"/>
            </bean>
        </property>
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
                <bean class="org.springframework.http.converter.StringHttpMessageConverter" >
                    <property name="writeAcceptCharset" value="false"/>
                </bean>
                <bean class="org.springframework.http.converter.ResourceHttpMessageConverter" />
                <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
                <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" />
<!--                <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />-->
<!--                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />-->
<!--                <bean class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter" />-->
<!--                <bean class="org.springframework.http.converter.feed.RssChannelHttpMessageConverter" />-->
            </list>
        </property>
    </bean>

    <bean class="org.springframework.web.servlet.handler.MappedInterceptor">
        <constructor-arg index="0"><null/></constructor-arg>
        <constructor-arg index="1">
            <bean class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor">
                <constructor-arg index="0" ref="conversion-service"/>
            </bean>
        </constructor-arg>
    </bean>

    
위에 주석 처리한 컨버터는 해당 라이브러리가 클래스 경로에 있을 때 활성화 된다. 수작업으로 설정할 때는 판단도 수작업으로...

그리고 생소한 MappedInterceptor는 이일민님 블로그 참조.


Spring 3.0.1 mvc:annotation-driven 이 몰래 하는 짓


by 박성철 | 2010/11/04 19:27 | 미분류 | 트랙백(1) | 핑백(2) | 덧글(3)

◀ 이전 페이지다음 페이지 ▶