Una aplicación web estándar de Spring (creada por Roo o la plantilla "Spring MVC Project") crea un web.xml con ContextLoaderListenery DispatcherServlet. ¿Por qué no solo usan DispatcherServlety 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 DispatcherServlety eliminarlos por ContextLoaderListenercompleto? (Todavía tendré diferentes archivos de configuración, pero solo un contexto).
¿Hay alguna razón para no eliminar el ContextLoaderListener?