scenario 1
Nell'applicazione client (l'applicazione non è un'applicazione Web, ad esempio può essere un'app swing)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
Non c'è bisogno di web.xml . ApplicationContext come contenitore per ottenere il servizio bean. Non è necessario il contenitore del server Web. In test-client.xml possono esserci bean semplici senza remoting, bean con remoting.
Conclusione : in Scenario 1 applicationContext e DispatcherServlet
non sono correlati.
Scenario 2
In un'applicazione server (applicazione distribuita nel server, ad esempio Tomcat). Servizio accessibile tramite telecomando dal programma client (ad es. App Swing)
Definisci listener in web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
All'avvio del server ContextLoaderListener
crea istanze dei bean definiti in applicationContext.xml .
Supponendo di aver definito quanto segue in applicationContext.xml :
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
I bean sono istanziati da tutti e quattro i file di configurazione test1.xml , test2.xml , test3.xml , test4.xml .
Conclusione : in Scenario 2 applicationContext e DispatcherServlet
non sono correlati.
Scenario 3
In un'applicazione Web con MVC di primavera.
In web.xml definire:
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
All'avvio di Tomcat, i bean definiti in springweb-servlet.xml vengono istanziati.
DispatcherServlet
si estende FrameworkServlet
. In FrameworkServlet
fagiolo istanziazione avviene per springweb. Nel nostro caso springweb è FrameworkServlet.
Conclusione : in Scenario 3 applicationContext e DispatcherServlet
non sono correlati.
Scenario 4
In applicazione web con MVC di primavera. springweb-servlet.xml per servlet e applicationContext.xml per accedere al servizio business nel programma server o per accedere al servizio DB in un altro programma server.
In web.xml sono definiti:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
All'avvio del server, ContextLoaderListener
istanzia i bean definiti in applicationContext.xml ; supponendo che tu abbia dichiarato qui:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
I bean sono tutti istanziati da tutti e quattro i test1.xml , test2.xml , test3.xml , test4.xml . Dopo il completamento dell'istanza del bean definita in applicationContext.xml , vengono istanziati i bean definiti in springweb-servlet.xml .
Quindi l'ordine di istanza è: root (contesto dell'applicazione), quindi FrameworkServlet.
Ora dovrebbe essere chiaro il motivo per cui sono importanti in quale scenario.