Standardowa aplikacja internetowa Spring (stworzona przez Roo lub szablon „Spring MVC Project”) tworzy plik web.xml z użyciem ContextLoaderListener
i DispatcherServlet
. Dlaczego nie tylko używają DispatcherServlet
i sprawiają, że ładują całą konfigurację?
Rozumiem, że ContextLoaderListener powinien być używany do ładowania rzeczy, które nie są istotne dla sieci, a DispatcherServlet służy do ładowania odpowiednich rzeczy internetowych (kontrolerów, ...). W rezultacie powstają dwa konteksty: kontekst rodzica i kontekst dziecka.
Tło:
Robiłem to w ten standardowy sposób przez kilka lat.
<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>
Często powodowało to problemy z dwoma kontekstami i zależnościami między nimi. W przeszłości zawsze byłem w stanie znaleźć rozwiązanie i mam silne przeczucie, że dzięki temu struktura / architektura oprogramowania jest zawsze lepsza. Ale teraz mam problem z wydarzeniami z obu kontekstów .
- Jednak to zmusza mnie do ponownego przemyślenia tych dwóch wzorców kontekstowych i zadaję sobie pytanie: dlaczego miałbym się w to pakować, dlaczego nie załadować wszystkich plików konfiguracyjnych sprężyny jednym DispatcherServlet
i ContextLoaderListener
całkowicie usunąć . (Nadal będę mieć różne pliki konfiguracyjne, ale tylko jeden kontekst).
Czy jest jakiś powód, aby nie usuwać ContextLoaderListener
?