오랜만에...라고 하기엔 정말 오랫동안 블로그에 글을 안 올렸는데 좌우간... 그렇게 오랫동안 안 올리다 올리는 글 치고는 손 안대고 코 푸는 수준의 글이지만 일단 다시 블로그질 좀 하려면 가볍게 시작하는 게 좋겠다는 생각이 들어서... 음...
암튼
스프링 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 이 몰래 하는 짓