Scénario 1
Dans l'application client (l'application n'est pas une application Web, par exemple peut être une application swing)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
Pas besoin de web.xml . ApplicationContext comme conteneur pour obtenir le service de bean. Pas besoin de conteneur de serveur Web. Dans test-client.xml, il peut y avoir un bean simple sans accès à distance, un bean avec accès à distance.
Conclusion : dans le scénario 1 applicationContext et DispatcherServlet
ne sont pas liés.
Scénario 2
Dans une application serveur (application déployée sur le serveur par exemple Tomcat). Service accessible via la télécommande depuis le programme client (par exemple, l'application Swing)
Définir l'écouteur dans web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Au démarrage du serveur, ContextLoaderListener
instancie les beans définis dans applicationContext.xml .
En supposant que vous ayez défini les éléments suivants dans applicationContext.xml :
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Les beans sont instanciés à partir des quatre fichiers de configuration test1.xml , test2.xml , test3.xml , test4.xml .
Conclusion : dans le scénario 2 applicationContext et DispatcherServlet
ne sont pas liés.
Scénario 3
Dans une application web avec ressort MVC.
Dans web.xml, définissez:
<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>
Au démarrage de Tomcat, les beans définis dans springweb-servlet.xml sont instanciés.
DispatcherServlet
s'étend FrameworkServlet
. Dans le FrameworkServlet
haricot, l'instanciation a lieu pour le springweb. Dans notre cas, springweb est FrameworkServlet.
Conclusion : dans le scénario 3 applicationContext et DispatcherServlet
ne sont pas liés.
Scénario 4
Dans l'application web avec ressort MVC. springweb-servlet.xml pour servlet et applicationContext.xml pour accéder au service métier dans le programme serveur ou pour accéder au service DB dans un autre programme serveur.
Dans web.xml, les éléments suivants sont définis:
<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>
Au démarrage du serveur, ContextLoaderListener
instancie les beans définis dans applicationContext.xml ; en supposant que vous avez déclaré ici:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Les beans sont tous instanciés à partir des quatre test1.xml , test2.xml , test3.xml , test4.xml . Une fois l'instanciation du bean définie dans applicationContext.xml terminée , les beans définis dans springweb-servlet.xml sont instanciés.
Donc l'ordre d'instanciation est: la racine (contexte d'application), puis FrameworkServlet.
Maintenant, il devrait être clair pourquoi ils sont importants dans quel scénario.