Non sono stati creati due contenitori separati. In genere, si desidera che spring instanzia l'oggetto dichiarato in servlet-context.xml quando l'oggetto è richiesto. Pertanto, si associa il file di configurazione servlet-context.xml al servlet Dispatcher, ovvero, si desidera inizializzare l'oggetto quando una richiesta raggiunge il servlet del dispatcher.
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Dove, come, se si desidera inizializzare l'oggetto e eseguire l'azione quando il contesto viene caricata si dovrebbe dichiarare il file di configurazione con le context-param
tag del vostro descrittore di deployment.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
Si potrebbe testare il tutto scrivendo dichiarando fagioli separati nel servlet-context.xml e radice-context.xml e poi, li autowiring in un contesto personalizzato classe Loader Listener. È possibile trovare solo le istanze del contesto root inizializzate e i bean di contesto servlet sono nulli.
fonte
2013-09-02 17:56:46
Non creano due diverse istanze contenitore, piuttosto due diversi contesti applicativi. –
Vedere [questo post] (http: // stackoverflow.com/q/7774295/1679863) –
Dopo anni, ho letto il codice sorgente del codice sorgente. Ora, posso dire: 1) sì, ci sono due istanze di ApplicationContext (ogni istanza includerà un'istanza di beanFactory) 2) l'istanza del livello mvc è child e mantiene un riferimento dell'istanza padre. 3) i bean nell'istanza genitore possono essere usati dal bambino, ma i bean in child non possono essere usati dai genitori. – lovespring