標準のSpring Webアプリケーション(Rooまたは「Spring MVC Project」テンプレートで作成)は、ContextLoaderListener
およびでweb.xmlを作成しますDispatcherServlet
。なぜ彼らはを使用してDispatcherServlet
、完全な構成をロードするだけではないのですか?
私は、ContextLoaderListenerを使用してWebに関連しないものをロードする必要があり、DispatcherServletを使用してWebに関連するもの(コントローラーなど)をロードすることを理解しています。この結果、2つのコンテキスト(親コンテキストと子コンテキスト)が生成されます。
バックグラウンド:
私はこの標準的な方法で数年間それをしていました。
<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>
これにより、2つのコンテキストとそれらの間の依存関係で問題が発生することがよくありました。以前は常に解決策を見つけることができました。これにより、ソフトウェアの構造/アーキテクチャが常に改善されると強く感じています。しかし今、私は両方の状況の出来事で問題に直面しています。
-ただし、これにより、この2つのコンテキストパターンを再考し、私は自分自身に問いかけます。なぜ、この問題に自分を持ち込む必要があるのか、すべてのSpring構成ファイルを1つにロードしDispatcherServlet
てContextLoaderListener
完全に削除しないのはなぜですか。(まだ、異なる構成ファイルを使用しますが、コンテキストは1つだけです。)
削除しない理由はありますContextLoaderListener
か?