escenario 1
En la aplicación cliente (la aplicación no es una aplicación web, por ejemplo, puede ser una aplicación swing)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
No necesita web.xml . ApplicationContext como contenedor para obtener el servicio bean. No es necesario el contenedor del servidor web. En test-client.xml puede haber Bean simple sin control remoto , Bean con control remoto .
Conclusión : en el Escenario 1 applicationContext y DispatcherServlet
no están relacionados.
Escenario 2
En una aplicación de servidor (aplicación implementada en el servidor, por ejemplo, Tomcat). Servicio accedido a través de comunicación remota desde el programa cliente (por ejemplo, la aplicación Swing)
Definir escucha en web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
En el inicio del servidor, se crean ContextLoaderListener
instancias de beans definidos en applicationContext.xml .
Suponiendo que haya definido lo siguiente en applicationContext.xml :
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Los beans se instancian de los cuatro archivos de configuración test1.xml , test2.xml , test3.xml , test4.xml .
Conclusión : en el Escenario 2 applicationContext y DispatcherServlet
no están relacionados.
Escenario 3
En una aplicación web con Spring MVC.
En web.xml define:
<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>
Cuando se inicia Tomcat, se crean instancias de beans definidos en springweb-servlet.xml .
DispatcherServlet
se extiende FrameworkServlet
. En el FrameworkServlet
frijol se produce una instanciación para la primavera. En nuestro caso springweb es FrameworkServlet.
Conclusión : en el escenario 3 applicationContext yDispatcherServlet
no están relacionados.
Escenario 4
En aplicación web con Spring MVC. springweb-servlet.xml para servlet y applicationContext.xml para acceder al servicio comercial dentro del programa del servidor o para acceder al servicio DB en otro programa de servidor.
En web.xml se definen los siguientes:
<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>
Al inicio del servidor, ContextLoaderListener
instancia los beans definidos en applicationContext.xml ; asumiendo que ha declarado aquí:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Todos los beans se instancian de los cuatro test1.xml , test2.xml , test3.xml , test4.xml . Después de completar la creación de instancias de bean definida en applicationContext.xml , se crean instancias de beans definidos en springweb-servlet.xml .
Entonces, el orden de creación de instancias es: la raíz (contexto de la aplicación), luego FrameworkServlet.
Ahora debe quedar claro por qué son importantes en qué escenario.