アプリケーション コンテキストと Web アプリケーション コンテキストの違いは何ですか?
WebApplicationContext
Spring MVC アーキテクチャ指向のアプリケーションに使用されることは知っていますか?
ApplicationContext
MVC アプリケーションでのの用途を知りたいです。また、 ではどのような種類の 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 の違い