흔히 Spring Web MVC 프로젝트를 할때 보면 <mvc:annotation-driven /> 을 많이 설정하는 편이다. 이거 하나를 설정함으로써 Spring Web MVC를 하기 위해 설정해야 하는 값들이 자동으로 추가 되는데 때로는 이것을 쓰지 않고 일일이 관련된 값을 수동으로 넣어야 하는 경우가 있다. 내가 겪은 대표적인 예로는 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter(줄여서 AnnotationMethodHandlerAdapter로 한다)에 메시지 컨버터를 추가해야 하는 상황이 있었는데 mvc 태그에서 별도로 추가를 할 수 있는 태그를 제공하질 않았다.(이 부분은 Spring 3.1에서는 별도 태그가 추가가 된 상태다) 그래서 <mvc:annotation-driven />을 지우고 내가 별도로 추가를 해야 하는데 문제는 이게 과연 어떤 클래스들을 어떻게 추가했는지 한눈에 감이 잘 안왔다. 그래서 STS(Spring Tool Suite)를 통해 <mvc:annotation-driven />이 내부적으론 다음의 태그가 추가 됨을 알수 있었다

<beans:bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<beans:bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<beans:bean id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
	<beans:property name="conversionService" ref="conversionService" />
	<beans:property name="validator" ref="validator" />
</beans:bean>
<beans:bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	<beans:property name="webBindingInitializer" ref="webBindingInitializer" />
	<beans:property name="messageConverters">
		<beans:list>
			<beans:bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.StringHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.ResourceHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
			<beans:bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
		</beans:list>
	</beans:property>
</beans:bean>
<beans:bean class="org.springframework.web.servlet.handler.MappedInterceptor">
	<beans:constructor-arg index="0"><beans:null /></beans:constructor-arg>
	<beans:constructor-arg index="1">
		<beans:bean class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor">
			<beans:constructor-arg index="0" ref="conversionService"/>
		</beans:bean>
	</beans:constructor-arg>
</beans:bean>
<beans:bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />


앞에 beans가 붙은것은 STS에서 MVC 프로젝트를 만들면 Web Context 설정파일의 기본 네임스페이스가 mvc가 되기때문에 그렇다. 만약 기본 네임스페이스가  beans이면 일반적으로 우리에게 익숙한 bean 으로 태그를 시작하면 된다.
현재로서는 <mvc:annotation-driven /> 대신 저걸로 바꿔도 별 지장이 없었다. @NumberFormat 같은 Formatter 어노테이션도 잘 작동되었다. 만약 <mvc:annotation-driven />을 통해 기본적으로 설정되는 것을 바꾸고자 할때는 위의 내용으로 대신 셋팅한뒤에 자신이 만든것을 추가하면 된다. 


  • BlogIcon 이승구 2014.07.25 16:43 신고

    일단 내용에 많이 도움이 되었습니다. 감사합니다. (_

    내용 중 궁금한 점이 있습니다.

    annotation-driven 이 위의 설정을 축약한 것이라는걸 STS 통해서 알아내셨다고 작성하셨는데요.

    저도 STS사용하는데 그 방법을 알지 못합니다.ㅜㅜ
    혹시 그 방법 간략하게 설명해 주실 수 있을까요??

    1. BlogIcon 메이킹러브 2014.07.29 14:46 신고

      답신이 늦어서 죄송합니다..
      제가 요즘 Spring Security 관련 블로그글을 쓰다보니 댓글을 미처 못봤네요..

      STS에 보시면 Spring Perspective가 있으실겁니다..거길 들어가시면 Spring Explorer 탭이 있는데요..
      거기서 만드신 프로젝트 명이 있을겁니다..
      그 프로젝트명의 하위 부분을 보시면 됩니다..
      환경설정파일(root-context.xml, servlet-context.xml 등)의 하위 부분을 보시면 설정된 bean과 그 bean 설정시 파라미터 값들을 보실수 있어요..

      근데 예전 STS에서는 <annotation-driven>을 할 경우 어떤게 내부적으로 뜨는지 알수가 있었는데..
      요즘은 버전이 올라가서인지 그걸 알수가 없네요..
      제가 Spring Security를 STS로 진행하고 있는데..
      Spring Security의 <http> 태그 설정시 어떤 bean들이 나타나는지 보이는데..
      Spring framework의 어노테이션 사용 설정 태그에 대해서는 보이질 않네요..ㅠㅠ..
      이제는 알 방법이 없는듯..검색해야 할것 같아요..
      죄송합니다..도움이 되질 못해서..

  • BlogIcon 이승구 2014.08.11 13:09 신고

    아 감사합니다.
    지금 확인해보니 역시 나오진 않지만
    Spring explorer 이란걸 알게되어서 ;;
    구석탱이에 작게 해놓고 보지를 않았었는데 잘 사용하면 편하겠군요 ㅎㅎ

    자세한 댓글 정말 감사합니다.

    좋은 글 많이 올려주셔서 감사합니다.
    즐겨찾기 해놓고 자주 방문하겠습니다.
    감사합니다.

트랙백을 확인할 수 있습니다

URL을 배껴둬서 트랙백을 보낼 수 있습니다

다른 카테고리의 글 목록

프로그래밍/Spring 카테고리의 포스트 목록을 보여줍니다