2013-09-08 12 views
19

In Spring MVC, ci sono due contesti. Uno è il contesto dell'applicazione o contesto globale che viene avviato da ContextLoaderListener. Prende tutti i file di configurazione menzionati nel parametro contextConfigLocation.Perché Spring MVC richiede almeno due contesti?

Ora, se si utilizza anche Spring MVC, è necessario il servlet Dispatcher, che avvia un altro contenitore noto anche come contenitore di applicazioni Web. Questo contenitore accetta il contenitore globale come genitore.

Quando si integrano i montanti1 con molla, esiste un solo contesto. Perché il mvc di primavera ha bisogno di due? È possibile utilizzare un solo contesto quando si utilizza il mvc a molla?

grazie!

risposta

12

Immagina di avere due Dispatcher separati, ciascuno con uno scopo diverso e ciascuno con le sue dipendenze. Dovresti configurarli in modo indipendente utilizzando contesti separati.

Se esiste una configurazione condivisa, questa può andare nel contesto "globale".

Non credo sia possibile avere un solo contesto utilizzando DispatcherServlet, poiché crea il proprio contesto e lo collega al contesto padre (tramite la superclasse di FrameworkServlet).

FrameworkServlet.createWebApplicationContext

14

Avere un contesto di applicazione principale del web più un contesto bambino servlet è solo un'opzione. Se sai che la tua applicazione non avrà un secondo servlet, è probabilmente più semplice avere un unico contesto Spring per l'intera applicazione web.

È possibile ottenere che l'installazione semplicemente rimuovendo il ContextLoaderListener (e l'accompagnamento contextConfigLocation context-param) dal web.xml e in movimento tutte le definizioni di fagioli in XML che definisce il contesto servlet ([servlet-name]-servlet.xml).

Questo è possibile, perché il FrameworkServlet (super-classe di DispatcherServlet) non importa se c'è un contesto di applicazione principale durante la creazione del contesto servlet. Semplicemente inoltra il contesto di root come genitore, se disponibile. Vedi related code here.

5

controllare questa risposta About multiple containers in spring framework

Sì, è possibile avere un solo contesto.

Per il riutilizzo del codice sarebbe meglio isolare i servizi nel contesto dell'applicazione piuttosto che WebApplicationContext.but non è obbligatorio. È possibile mantenere solo webApplicationcontext.

Problemi correlati