Spring MVC の ApplicationContext と WebApplicationContext の違いは何ですか? 質問する

Spring MVC の ApplicationContext と WebApplicationContext の違いは何ですか? 質問する

アプリケーション コンテキストと Web アプリケーション コンテキストの違いは何ですか?

WebApplicationContextSpring MVC アーキテクチャ指向のアプリケーションに使用されることは知っていますか?

ApplicationContextMVC アプリケーションでのの用途を知りたいです。また、 ではどのような種類の Bean が定義されていますApplicationContextか?

ベストアンサー1

Webアプリケーションコンテキストは、標準で動作するように設計された拡張アプリケーションコンテキストです。javax.servlet.ServletContextコンテナと通信できるようになります。

public interface WebApplicationContext extends ApplicationContext {
    ServletContext getServletContext();
}

WebApplicationContextでインスタンス化されたBeanは、ServletContextAwareインターフェースを実装していればServletContextも使用できるようになります。

package org.springframework.web.context;
public interface ServletContextAware extends Aware { 
     void setServletContext(ServletContext servletContext);
}

ServletContext インスタンスでは、getResourceAsStream() メソッドを呼び出して WEB-INF リソース (xml 構成など) にアクセスするなど、さまざまなことが可能です。通常、サーブレット Spring アプリケーションの web.xml で定義されているすべてのアプリケーション コンテキストは Web アプリケーション コンテキストであり、これはルート Web アプリケーション コンテキストとサーブレットのアプリケーション コンテキストの両方に適用されます。

また、Webアプリケーションのコンテキスト機能によっては、アプリケーションのテストが少し難しくなる可能性があり、モックサーブレットコンテキストテスト用のクラス。

サーブレットとルートコンテキストの違いSpring では、複数レベルのアプリケーション コンテキスト階層を構築できるため、必要な Bean が現在のアプリケーション コンテキストに存在しない場合は、親コンテキストから取得されます。Web アプリでは、デフォルトで、ルート コンテキストとサーブレット コンテキストの 2 つの階層レベルがありますサーブレットとルートコンテキスト

これにより、一部のサービスをアプリケーション全体のシングルトンとして実行し (Spring Security Bean と基本的なデータベース アクセス サービスは通常ここに存在します)、別のサービスを対応するサーブレット内の個別のサービスとして実行して、Bean 間の名前の衝突を回避することができます。たとえば、1 つのサーブレット コンテキストで Web ページを提供し、別のサーブレット コンテキストでステートレス Web サービスを実装します。

この2レベルの分離は、Springサーブレットクラスを使用する場合にすぐに利用できます。ルートアプリケーションコンテキストを構成するには、コンテキストパラメータweb.xmlのタグ

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/root-context.xml
            /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>

(ルートアプリケーションコンテキストは、コンテキストローダーリスナーこれはweb.xmlで宣言されています

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> 

) そしてサーブレットサーブレットアプリケーションコンテキストのタグ

<servlet>
   <servlet-name>myservlet</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>app-servlet.xml</param-value>
   </init-param>
</servlet>

この例では、init-param が省略されると、Spring は myservlet-servlet.xml を使用することに注意してください。

参照:Spring Framework における applicationContext.xml と spring-servlet.xml の違い

おすすめ記事