Szenario 1
In der Client-Anwendung (Anwendung ist keine Webanwendung, z. B. Swing-App)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
Keine Notwendigkeit für web.xml . ApplicationContext als Container zum Abrufen des Bean-Dienstes. Kein Webserver-Container erforderlich. In test-client.xml kann es eine einfache Bean ohne Remoting und eine Bean mit Remoting geben.
Schlussfolgerung : In Szenario 1 applicationContext und DispatcherServlet
sind nicht verwandt.
Szenario 2
In einer Serveranwendung (auf dem Server bereitgestellte Anwendung, z. B. Tomcat). Zugriff auf den Dienst über Remoting vom Client-Programm (z. B. Swing-App)
Definieren Sie den Listener in web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Beim Serverstart werden ContextLoaderListener
in applicationContext.xml definierte Beans instanziiert .
Angenommen, Sie haben in applicationContext.xml Folgendes definiert :
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Die Beans werden aus allen vier Konfigurationsdateien test1.xml , test2.xml , test3.xml , test4.xml instanziiert .
Schlussfolgerung : In Szenario 2 applicationContext und DispatcherServlet
sind nicht verwandt.
Szenario 3
In einer Webanwendung mit Feder MVC.
In web.xml definieren Sie:
<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>
Wenn Tomcat gestartet wird, werden die in springweb-servlet.xml definierten Beans instanziiert.
DispatcherServlet
erstreckt sich FrameworkServlet
. In FrameworkServlet
Bean erfolgt die Instanziierung für Springweb. In unserem Fall ist springweb FrameworkServlet.
Schlussfolgerung : In Szenario 3 applicationContext und DispatcherServlet
sind nicht verwandt.
Szenario 4
In Webanwendung mit Feder MVC. springweb-servlet.xml für servlet und applicationContext.xml für den Zugriff auf den Geschäftsdienst innerhalb des Serverprogramms oder für den Zugriff auf den DB-Dienst in einem anderen Serverprogramm.
In web.xml sind folgende definiert:
<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>
ContextLoaderListener
Instanziiert beim Start des Servers die in applicationContext.xml definierten Beans . vorausgesetzt, Sie haben hier erklärt:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Die Beans werden alle aus allen vier test1.xml , test2.xml , test3.xml , test4.xml instanziiert . Nach Abschluss der in applicationContext.xml definierten Bean-Instanziierung werden in springweb-servlet.xml definierte Beans instanziiert.
Die Instanziierungsreihenfolge lautet also: Root (Anwendungskontext), dann FrameworkServlet.
Jetzt sollte klar sein, warum sie in welchem Szenario wichtig sind.