Una aplicación web estándar de Spring (creada por Roo o la plantilla "Spring MVC Project") crea un web.xml con ContextLoaderListener
y DispatcherServlet
. ¿Por qué no solo usan DispatcherServlet
y hacen que cargue la configuración completa?
Entiendo que ContextLoaderListener debe usarse para cargar cosas que no son relevantes para la web y DispatcherServlet se usa para cargar cosas relevantes para la web (Controladores, ...). Y esto da como resultado dos contextos: un contexto primario y uno secundario.
Antecedentes:
Lo hice de esta manera estándar durante varios años.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Handles Spring requests -->
<servlet>
<servlet-name>roo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/webmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Esto a menudo causó problemas con los dos contextos y las dependencias entre ellos. En el pasado siempre pude encontrar una solución, y tengo la fuerte sensación de que esto hace que la estructura / arquitectura del software siempre sea mejor. Pero ahora estoy enfrentando un problema con los eventos de ambos contextos .
- Sin embargo, esto me hace repensar este patrón de dos contextos, y me pregunto: ¿por qué debería meterme en este problema, por qué no cargar todos los archivos de configuración de Spring con uno DispatcherServlet
y eliminarlos por ContextLoaderListener
completo? (Todavía tendré diferentes archivos de configuración, pero solo un contexto).
¿Hay alguna razón para no eliminar el ContextLoaderListener
?