Spring MVCアプリケーションでweb.xmlを使用してコンテキストをロードする方法はありますか?
春のドキュメントから
Springは、JavaベースのWebフレームワークに簡単に統合できます。あなたがする必要があるのは、ContextLoaderListenerをweb.xmlおよびcontextConfigLocationを使用して、ロードするコンテキストファイルを設定します。
<context-param>
:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
その後、WebApplicationContextを使用して、Beanのハンドルを取得できます。
WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());
SomeBean someBean = (SomeBean) ctx.getBean("someBean");
詳細については、 http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html を参照してください。
また、現在のクラスパスを基準にしてコンテキストの場所を指定することもできます。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
サーブレット自体を定義しながらコンテキストをロードすることもできます(WebApplicationContext)
<servlet>
<servlet-name>admin</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/*.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(ApplicationContext)ではなく
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
または、両方を一緒に行うことができます。
WebApplicationContextを使用するだけの欠点は、この特定のSpringエントリポイント(DispatcherServlet
)のみのコンテキストをロードすることです。上記のメソッドと同様に、コンテキストは複数のエントリポイント(たとえばWebservice Servlet, REST servlet
など)にロードされます
ContextLoaderListener
によってロードされたコンテキストは、実際にはDisplacherServlet専用にロードされたコンテキストの親コンテキストになります。したがって、基本的に、アプリケーションコンテキストですべてのビジネスサービス、データアクセス、またはリポジトリBeanをロードし、コントローラーを分離して、リゾルバBeanをWebApplicationContextに表示できます。