[spring] 서블릿에서 <mvc : annotation-driven />과 <context : annotation-config />의 차이점은 무엇입니까?

Spring 2.5에서 Spring 3으로 마이그레이션하고 있습니다.

그들은 <mvc:annotation-driven />흑 마술을하는 것을 소개했습니다 . 이것은 서블릿 구성 파일에서만 선언 될 것으로 예상됩니다.

Spring 2.5에서는 방금 스캔하고 적절한 기본 패키지로 Dispatcher 서블릿 구성 XML을 선언 <context:annotation-config />하고 사용했습니다 .<context:component-scan base='...'/>application-context.xml

서블릿 설정에서 mvc:annotation-drivencontext:annotation-config태그 의 차이점이 무엇이고 Spring 3 설정 파일에서 무엇을 제거 할 수 있는지 궁금 합니다.



답변

<context:annotation-config>같은 일반적인 주석에 대한 지원을 선언 @Required, @Autowired, @PostConstruct, 등을.

<mvc:annotation-driven />주석 기반의 MVC 컨트롤러에 대한 명시 적으로 지원 선언 (즉 @RequestMapping, @Controller이들에 대한 지원은 기본 동작이지만) 선언을 통해 검증뿐만 아니라, 추가 지원 @Valid과와 메시지 본문 마샬링 @RequestBody/을 ResponseBody.


답변

Spring 문서<mvc:annotation-driven /> 에서의 사용에 대한 자세한 내용도 있습니다 . 간단히 말해서<mvc:annotation-driven /> Spring MVC의 내부 작동을보다 강력하게 제어 할 수 있습니다. 위에서 언급 한 문서 섹션에 설명 된 기능 중 하나 이상이 필요한 경우가 아니면이 도구를 사용할 필요가 없습니다.

또한 다른 스프링 모듈에서 추가 기능을 제공하기 위해 사용할 수있는 다른 “주석 기반”태그가 있습니다. 예를 들어 <transaction:annotation-driven />@Transaction 어노테이션을 사용할 수있게하려면 <task:annotation-driven />@Scheduled et al.


답변

mvc : annotation-driven 은 Spring 3.0에 추가 된 태그로 다음을 수행합니다.

  1. Spring 3 Type ConversionService를 구성합니다 (PropertyEditors 대신).
  2. @NumberFormat을 사용하여 숫자 필드 서식 지정 지원 추가
  3. Joda Time이 클래스 경로에있는 경우 @DateTimeFormat으로 Date, Calendar 및 Joda Time 필드의 서식 지정을 지원합니다.
  4. JSR-303 제공자가 클래스 경로에있는 경우 @Valid를 사용하여 @Controller 입력의 유효성 검증을 지원합니다.
  5. JAXB가 클래스 경로에있는 경우 XML 읽기 및 쓰기 지원 기능을 추가합니다 (@ RequestBody / @ ResponseBody를 사용한 HTTP 메시지 변환).
  6. Jackson이 클래스 경로에있는 경우 (# 5와 동일한 행에) JSON 읽기 및 쓰기 지원 추가

context : annotation-config
정의 된 동일한 애플리케이션 컨텍스트에서 Bean에 대한 주석을 찾고 @Autowired, @Resource, @Required, @PostConstruct 등과 같은 모든 일반 주석에 대한 지원을 선언합니다.


답변