2014년 2월 4일 화요일

Spring annotation-driven 자동으로 등록되는 빈은 ??

<mvc:annotation-driven> 애노테이션 방식의 @MVC를 사용시 필요한 몇가지 빈들을 자동으로 등록해 줍니다. 자동으로 등록되는 빈이 어떤것인지 기억해두고 이를 다시 <bean>태그로 등록하지 않게 해야 합니다. AnnotationMethodHandlerAdapter와 DefaultAnnotationHandlerMapping등의 설정을 변경해야 할 때는 <mvc:annotation-driven>을 사용할 수는 없고 이때는 직접 필요한 빈을 등록하고 프로퍼티를 설정해줘야 합니다. 아래는 자동으로 등록되는 빈들의 내용이고 몰라도 일단 사용상의 문제는 없겠습니다.

1. DefaultAnnotationHandlerMapping 

@RequestMapping을 이용한 핸들러 매핑 전략 등록, 이것이 가장 우선이 되므로 다른 핸들러 매핑은 자동등록 되지 않는다.

2. AnnotationMethodHandlerAdapter

디폴트 핸들러 어댑터, 이것이 가장 우선이 되므로 다른 핸들로 어댑터는 자동등록 되지 않는다.

3. ConfigurableWebBindingInitializer

모든 컨트롤러 메소드에 자동으로 적용되는 WebDataBinder 초기화용 빈을 등록하고 AnnotationMethodhandlerAdapter의 프로퍼티로 연결해 준다. 기본 등록 빈은 FormattingConversionServiceFactoryBean, LocalValidatorFactoryBean 이고 LocalValidatorFactoryBean기능이 적용되려면 JSR-303지원 라이브러리가 클래스패스에 등록되어 있어야 한다.

4. 메시지 컨버터

네개의 디폴트 메시지 컨버터와 Jaxb2RootElementHttpMessageConverter, MappingJacksonHttpMessageConverter가 추가로 등록된다 (JAXB2와 Jackson 라이브러리를 클래스패스에 있어야만 등록됨)

5. <spring:eval>을 위한 컨버전 서비스 노출용 인터셉터

기본적으로 표준 컨버터를 이용해서 모델의 프로퍼티 값을 JSP에 출력할 문자열로 변환 하지만 <mvc:annotation-driven>을 등록해주면 ConfigurableWebBindingInitializer에 등록되는 것과 동일한 컨버전 서비스를 인터셉터를 이용해서 <spring:eval>태그에서 사용할 수 있게 해준다.

6. validator

자동등록되는 ConfigurableWebBindingInitializer의 validator 프로퍼티에 적용할 Validator 타입의 빈을 직접 지정할 수 있다. [code language="text"] // property 설정 [/code] 자동등록되는 ConfigurableWebBindingInitializer의 conversionService 프로퍼티에 설정될 빈을 지정할 수 있다. [code language="text"] .... [/code]
  • <mvc:annotation-driven> 암묵적으로 설정되는 빈
  • 소스코드는org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser.java
[code language="text"] [/code]

댓글 없음:

댓글 쓰기