Um aplicativo web spring padrão (criado pelo Roo ou modelo "Spring MVC Project") cria um web.xml com ContextLoaderListenere DispatcherServlet. Por que eles não apenas usam DispatcherServlete fazem o carregamento da configuração completa?
Entendo que o ContextLoaderListener deve ser usado para carregar o material que não é relevante para a Web e o DispatcherServlet é usado para carregar o material relevante para a Web (Controladores, ...). E isso resulta em dois contextos: um pai e um filho.
Fundo:
Eu estava fazendo isso dessa maneira padrão por vários anos.
<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>
Isso geralmente causava problemas nos dois contextos e nas dependências entre eles. No passado, sempre fui capaz de encontrar uma solução e tenho a forte sensação de que isso torna a estrutura / arquitetura do software sempre melhor. Mas agora estou enfrentando um problema com os eventos dos dois contextos .
- No entanto, isso faz com que eu repense esse padrão de dois contextos, e estou me perguntando: por que devo me meter nesse problema, por que não carregar todos os arquivos de configuração de primavera com um DispatcherServlete remover ContextLoaderListenercompletamente. (Ainda terei arquivos de configuração diferentes, mas apenas um contexto.)
Existe algum motivo para não remover o ContextLoaderListener?