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


155

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 설정 파일에서 무엇을 제거 할 수 있는지 궁금 합니다.

답변:


150

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

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


3
컴포넌트 스캔 태그에서 다른 기본 패키지를 사용하는 경우 applicationContext와 서블릿 모두에서 context : annotation-config를 선언해야합니까?
glaz666

2
예, <context:annotation-config>각 상황에서 필요합니다 .
skaffman

61
@ skaffman : 의미 <mvc:annotation-driven>가 없습니다. 이름이 잘못되었습니다. 실제로는 선언적 유효성 검사 @Valid, @RequestBody/를 사용한 HTTP 메시지 변환 @ResponseBody, 새로운 필드 변환 아키텍처 등과 같은 새로운 Spring MVC 기능에 대한 지원을 구성합니다 .
axtavt

5
@Richards : 일반적으로 예를 참조 blog.springsource.com/2009/12/21/...
axtavt

7
mvc : annotation-driven이 변환 및 유효성 검사에 중요하므로이 답변은 잘못되었습니다. 여기서 정확하고 가치있는 것은 @axtavt의 의견입니다.
Konrad Garus

36

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

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


이 태그와 비슷한 xml의 설정 세트를보고 싶습니다. 오래 전에 그 예를 들어 왔지만 불완전했습니다. AFAIR.
glaz666

7

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 등과 같은 모든 일반 주석에 대한 지원을 선언합니다.


2
mvc : annotation-driver에 대한 소스 및 자세한 내용 -spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0
Aniket Thakur

따라서 @Autowired, @Resource, @Required, @PostConstruct AND 가 필요한 경우 @RequestBody, @ResponseBody모든 주석을 mvc:annotation-driven context:annotation-config구성에 두 태그를 모두 추가해야 합니까?
R Dhaval
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.