Qual è la differenza tra <mvc: annotation-driven /> e <context: annotation-config /> nel servlet?


155

Sto migrando dalla primavera 2.5 alla primavera 3.

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

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

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

Risposte:


150

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

<mvc:annotation-driven />dichiara il supporto esplicito per i controller MVC guidati dalle annotazioni (vale a dire @RequestMapping, @Controllersebbene il supporto sia il comportamento predefinito), oltre ad aggiungere il supporto per la convalida dichiarativa tramite @Valide il marshalling dei messaggi con @RequestBody/ ResponseBody.


3
dovrei dichiarare contesto: annotation-config sia in applicationContext che in servlet, specialmente se uso diversi pacchetti di base nel tag di scansione dei componenti?
glaz666,

2
Sì, avrai bisogno <context:annotation-config>in ogni contesto.
Skaffman,

61
@skaffman: <mvc:annotation-driven>non è inutile, ha solo un nome improprio. In realtà configura il supporto per le nuove funzionalità 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

5
@Richards: di solito sì, vedi blog.springsource.com/2009/12/21/…
axtavt

7
Questa risposta è chiaramente sbagliata, in quanto mvc: l'annotazione guidata è fondamentale per le conversioni e la convalida. L'unica cosa corretta e utile qui è il commento di @axtavt.
Konrad Garus,

36

C'è anche un po 'più in dettaglio sull'utilizzo dei <mvc:annotation-driven />nei documenti di primavera . In poche parole, <mvc:annotation-driven />ti dà un maggiore controllo sul funzionamento interno di Spring MVC. Non è necessario utilizzarlo a meno che non siano necessarie una o più delle funzionalità descritte nella sezione dei documenti di cui sopra.

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


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,

7

mvc: annotation-driven è un tag aggiunto in Spring 3.0 che procede come segue:

  1. Configura il servizio di conversione del tipo Spring 3 (in alternativa a PropertyEditor)
  2. Aggiunge il supporto per la formattazione dei campi numerici con @NumberFormat
  3. Aggiunge supporto per la formattazione dei campi Data, Calendario e Ora Joda con @DateTimeFormat, se Joda Time si trova sul percorso di classe
  4. Aggiunge il supporto per la convalida degli ingressi @Controller con @Valid, se un provider JSR-303 si trova sul percorso di classe
  5. Aggiunge il supporto per il supporto per la lettura e la scrittura di XML, se JAXB si trova sul percorso di classe (conversione dei messaggi HTTP con @ RequestBody / @ ResponseBody)
  6. Aggiunge il supporto per la lettura e la scrittura di JSON, se Jackson è sul percorso di classe (seguendo le stesse linee del numero 5)

context: annotation-config Cerca le annotazioni sui bean nello stesso contesto applicativo in cui è definito e dichiara il supporto per tutte le annotazioni generali come @Autowired, @Resource, @Required, @PostConstruct ecc ecc.


2
Fonte e maggiori dettagli su mvc: annotation-driver - spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0
Aniket Thakur

Quindi intendi dire, se ho bisogno di @Autowired, @Resource, @Required, @PostConstruct AND @RequestBody, @ResponseBody- tutte queste annotazioni dovrò aggiungere entrambi questi mvc:annotation-driven context:annotation-configtag nella mia configurazione?
R Dhaval,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.