web-dev-qa-db-ja.com

web.xmlを使用してSpringでコンテキストをロードする

Spring MVCアプリケーションでweb.xmlを使用してコンテキストをロードする方法はありますか?

68
tamilnad

春のドキュメントから

Springは、JavaベースのWebフレームワークに簡単に統合できます。あなたがする必要があるのは、ContextLoaderListenerweb.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 を参照してください。

118
ddewaele

また、現在のクラスパスを基準にしてコンテキストの場所を指定することもできます。

<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>
34
fmucar

サーブレット自体を定義しながらコンテキストをロードすることもできます(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に表示できます。

17
Aniket Thakur