web-dev-qa-db-fra.com

Quelle est la différence entre <mvc: annotation-driven /> et <context: annotation-config /> dans le servlet?

Je migre du printemps 2.5 au printemps 3.

Ils ont introduit <mvc:annotation-driven /> qui fait de la magie noire. Cela devrait être déclaré dans le fichier de configuration du servlet uniquement.

Au printemps 2.5, je viens d'utiliser les balises <context:annotation-config /> et <context:component-scan base='...'/> déclarées à la fois dans application-context.xml et le code de configuration XML du servlet répartiteur avec les packages de base appropriés à analyser.

Je me demande donc quelle est la différence entre les balises mvc:annotation-driven et context:annotation-config dans la configuration de servlet et que puis-je éliminer dans les fichiers de configuration Spring 3?

152
glaz666

<context:annotation-config> déclare la prise en charge des annotations générales telles que @Required, @Autowired, @PostConstruct, etc.

<mvc:annotation-driven /> déclare la prise en charge explicite des contrôleurs MVC basés sur les annotations (c'est-à-dire @RequestMapping, @Controller, bien que la prise en charge de ceux-ci soit le comportement par défaut), ainsi que la prise en charge de la validation déclarative via @Valid et le corps du message avec @RequestBody/ResponseBody.

147
skaffman

Il y a aussi quelques détails supplémentaires sur l'utilisation de <mvc:annotation-driven /> dans Spring docs . En un mot, <mvc:annotation-driven /> vous donne un meilleur contrôle sur le fonctionnement interne de Spring MVC. Vous n'avez pas besoin de l'utiliser, sauf si vous avez besoin d'une ou plusieurs des fonctionnalités décrites dans la section susmentionnée de la documentation.

En outre, d'autres balises "pilotées par l'annotation" sont disponibles pour fournir des fonctionnalités supplémentaires dans d'autres modules Spring. Par exemple, <transaction:annotation-driven /> permet d'utiliser l'annotation @Transaction, <task:annotation-driven /> est requis pour @Scheduled et al ...

36
seanhodges

mvc: annotation-driven est une balise ajoutée dans Spring 3.0 qui effectue les opérations suivantes:

  1. Configure le service de conversion de type Spring 3 (alternative à PropertyEditors)
  2. Ajoute la prise en charge du formatage des champs numériques avec @NumberFormat
  3. Ajoute la prise en charge du formatage des champs Date, Agenda et Joda Time avec @DateTimeFormat, si Joda Time est sur le chemin de classe
  4. Ajoute la prise en charge de la validation des entrées @Controller avec @Valid, si un fournisseur JSR-303 est sur le chemin de classe
  5. Ajoute la prise en charge de la lecture et de l'écriture XML, si JAXB est sur le chemin de classe (conversion de message HTTP avec @ RequestBody/@ ResponseBody)
  6. Ajoute le support pour la lecture et l'écriture de JSON, si Jackson est sur le classpath (dans le même sens que # 5)

contexte: annotation-config Recherche les annotations sur les beans dans le même contexte d'application que celui défini et déclare la prise en charge de toutes les annotations générales telles que @Autowired, @Resource, @Required, @PostConstruct, etc.

7