2010-10-20 9 views
145

Sto migrando dalla primavera 2.5 alla primavera 3.Qual è la differenza tra <mvc: annotation-driven /> e <context: annotation-config /> nel servlet?

Hanno introdotto <mvc:annotation-driven /> che fa un po 'di magia nera. Questo dovrebbe essere dichiarato solo nel file di configurazione servlet.

Nella primavera 2.5 ho appena usato i tag <context:annotation-config /> e <context:component-scan base='...'/> dichiarati sia in application-context.xml sia in XML di configurazione del servlet del dispatcher con i pacchetti di base appropriati da analizzare.

Quindi mi chiedo qual è la differenza tra i tag mvc:annotation-driven e context:annotation-config nella configurazione servlet e cosa posso eliminare nei file di configurazione di Spring 3?

risposta

137

<context:annotation-config> dichiara supporto per annotazioni generali come @Required, @Autowired, @PostConstruct e così via.

<mvc:annotation-driven /> dichiara supporto esplicito per i controller MVC annotazione-driven (cioè @RequestMapping, @Controller, anche se il supporto per chi è il comportamento predefinito), così come l'aggiunta del supporto per la convalida dichiarativo tramite @Valid e corpo del messaggio di smistamento con @RequestBody/ResponseBody.

+2

dovrei dichiarare il contesto: annotation-config sia in applicationContext che in servlet, specialmente se utilizzo diversi pacchetti di base nel tag component-scan? – glaz666

+2

Sì, avrai bisogno di '' in ogni contesto. – skaffman

+55

@skaffman: '' non è inutile, è solo un nome improprio. In realtà configura il supporto per le nuove funzionalità di Spring MVC come la convalida dichiarativa con '@ Valid', la conversione dei messaggi HTTP con' @ RequestBody'/'@ ResponseBody', la nuova architettura di conversione dei campi, ecc. – axtavt

34

Sono inoltre disponibili ulteriori dettagli sull'uso di <mvc:annotation-driven /> nello Spring docs. In poche parole, <mvc:annotation-driven /> offre un maggiore controllo sui meccanismi interni di Spring MVC. Non è necessario utilizzarlo a meno che non si abbia bisogno di una o più delle funzioni descritte nella sezione sopracitata dei documenti.

Inoltre, sono disponibili altri tag "annotation-driven" per fornire funzionalità aggiuntive in altri moduli Spring. Ad esempio, <transaction:annotation-driven /> consente l'uso dell'annotazione @Transaction, <task:annotation-driven /> è richiesto per @Scheduled et al ...

+0

Mi piacerebbe vedere un set di impostazioni in xml che sono simili a questo tag. Una volta mi sono imbattuto in quell'esempio molto tempo fa ma era incompleto, AFAIR. – glaz666

+0

Grazie per il tuo link 'Spring docs'. – Eddy

5

MVC: annotazione-driven è un tag aggiunto nella primavera del 3.0, che esegue le seguenti operazioni:

  1. configura il tipo ConversionService Spring 3 (in alternativa a PropertyEditors)
  2. aggiunge il supporto per la formattazione di campi numerici con @NumberFormat
  3. aggiunge il supporto per la formattazione data, il calendario, e campi Joda tempo con @DateTimeFormat, se Joda Tempo è sul classpath
  4. Aggiunge il supporto per la convalida ingressi @Controller con @Valid, se un JSR-303 Provider è sul classpath
  5. aggiunge il supporto per il supporto per la lettura e la scrittura di XML, se JAXB è sul classpath (messaggio HTTP conversione con @ RequestBody/@ responseBody)
  6. aggiunge il supporto per la lettura e la scrittura di JSON, se Jackson è nel classpath (lungo le stesse linee come 5 #)

context: annotation-config cerca annotazioni su bean nello stesso contesto di applicazione che è definito e dichiara supporto per tutte le annotazioni generali come @Autowired, @Resource, @Required, @PostConstruct ecc ecc

+2

Fonte e ulteriori dettagli su mvc: annotation-driver - https://spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0/ –

Problemi correlati