Eine Standard-Spring-Webanwendung (erstellt von Roo oder der Vorlage "Spring MVC Project") erstellt eine web.xml mit ContextLoaderListener
und DispatcherServlet
. Warum verwenden sie nicht nur das DispatcherServlet
und machen es, um die komplette Konfiguration zu laden?
Ich verstehe, dass der ContextLoaderListener zum Laden der nicht webrelevanten Inhalte verwendet werden sollte und das DispatcherServlet zum Laden der webrelevanten Inhalte (Controller, ...). Dies führt zu zwei Kontexten: einem übergeordneten und einem untergeordneten Kontext.
Hintergrund:
Ich habe es mehrere Jahre lang auf diese übliche Weise gemacht.
<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>
Dies verursachte häufig Probleme mit den beiden Kontexten und den Abhängigkeiten zwischen ihnen. In der Vergangenheit konnte ich immer eine Lösung finden, und ich habe das starke Gefühl, dass dies die Softwarestruktur / -architektur immer besser macht. Aber jetzt stehe ich vor einem Problem mit den Ereignissen beider Kontexte .
- Dies lässt mich jedoch diese beiden Kontextmuster überdenken, und ich frage mich: Warum sollte ich mich in diese Schwierigkeiten bringen, warum nicht alle Federkonfigurationsdateien mit einer laden DispatcherServlet
und die ContextLoaderListener
vollständig entfernen . (Ich werde immer noch verschiedene Konfigurationsdateien haben, aber nur einen Kontext.)
Gibt es einen Grund, das nicht zu entfernen ContextLoaderListener
?