2010-10-20 13 views
145

Estoy migrando de Spring 2.5 a Spring 3.¿Cuál es la diferencia entre <mvc: annotation-driven /> y <context: annotation-config /> en servlet?

Han introducido <mvc:annotation-driven /> que hace algo de magia negra. Se espera que esto se declare solo en el archivo de configuración de servlet.

En Spring 2.5 Acabo de utilizar las etiquetas <context:annotation-config /> y <context:component-scan base='...'/> declaradas tanto en application-context.xml como en el XML de configuración del servlet del distribuidor con paquetes base apropiados para escanear.

Así que me pregunto cuál es la diferencia entre las etiquetas mvc:annotation-driven y context:annotation-config en la configuración de servlet y qué puedo eliminar en los archivos de configuración de Spring 3?

Respuesta

137

<context:annotation-config> declara soporte para anotaciones generales como @Required, @Autowired, @PostConstruct, y así sucesivamente.

<mvc:annotation-driven /> declara apoyo explícito para los controladores de MVC anotación impulsado (es decir @RequestMapping, @Controller, aunque el soporte para aquellos es el comportamiento por defecto), así como el apoyo para la validación de la adición declarativa través @Valid y cuerpo del mensaje cálculo de referencias con @RequestBody/ResponseBody.

+2

debo declarar context: annotation-config en applicationContext y servlet, especialmente si utilizo paquetes base diferentes en la etiqueta component-scan? – glaz666

+2

Sí, necesitará '' en cada contexto. – skaffman

+55

@skaffman: '' no es inútil, simplemente se nombra incorrectamente. En realidad, configura el soporte para las nuevas funciones de Spring MVC, como la validación declarativa con '@ Válido', conversión de mensaje HTTP con' @ RequestBody'/'@ ResponseBody', nueva arquitectura de conversión de campo, etc. – axtavt

34

También hay más detalles sobre el uso de <mvc:annotation-driven /> en el Spring docs. En pocas palabras, <mvc:annotation-driven /> le da un mayor control sobre el funcionamiento interno de Spring MVC. No necesita usarlo a menos que necesite una o más de las características descritas en la sección de los documentos mencionada anteriormente.

Además, hay otras etiquetas "accionadas por anotación" disponibles para proporcionar funcionalidad adicional en otros módulos de Spring. Por ejemplo, <transaction:annotation-driven /> permite el uso de la anotación @Transaction, se requiere <task:annotation-driven /> para @Scheduled et al ...

+0

Me gustaría ver un conjunto de configuraciones en xml que sean similares a esta etiqueta. Una vez que me encontré con ese ejemplo hace mucho tiempo, pero estaba incompleto, AFAIR. – glaz666

+0

Gracias por su enlace 'Spring docs'. – Eddy

5

mvc: anotación impulsada es una etiqueta añadida en la primavera de 3,0 que hace lo siguiente:

  1. Configura el ConversionService Tipo Spring 3 (alternativa a PropertyEditors)
  2. añade soporte para el formato de los campos numéricos con @NumberFormat
  3. añade soporte para el formato de Fecha, Calendario, y los campos Joda Time con @DateTimeFormat, si Joda Time está en la ruta de clase
  4. añade soporte para la validación de las entradas @Controller con @Valid, si un proveedor de JSR-303 está en la ruta de clase
  5. añade soporte para el soporte para leer y escribir XML, si JAXB está en la ruta de clase (mensaje HTTP la conversión con @ RequestBody/@ responseBody)
  6. añade soporte para leer y escribir JSON, si Jackson se encuentra en la ruta de clase (en la misma línea como # 5)

contexto: anotación-config busca anotaciones sobre frijoles en el mismo contexto de aplicación se define y declara soporte para todas las anotaciones generales como @Autowired, @Resource, @Required, @PostConstruct, etc.

+2

Fuente y más detalles sobre mvc: annotation-driver - https://spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0/ –

Cuestiones relacionadas