アプリケーション コンテキストと Web アプリケーション コンテキストの違いは何ですか?
WebApplicationContext
Spring MVC アーキテクチャ指向のアプリケーションに使用されていることを認識していますか?
ApplicationContext
MVC アプリケーションでの使用について知りたいですか? では、どのような種類の Bean が定義されていApplicationContext
ますか?
アプリケーション コンテキストと Web アプリケーション コンテキストの違いは何ですか?
WebApplicationContext
Spring MVC アーキテクチャ指向のアプリケーションに使用されていることを認識していますか?
ApplicationContext
MVC アプリケーションでの使用について知りたいですか? では、どのような種類の Bean が定義されていApplicationContext
ますか?
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);
}
getResourceAsStream() メソッドを呼び出して WEB-INF リソース (xml 構成など) にアクセスするなど、ServletContext インスタンスでできることはたくさんあります。通常、サーブレット Spring アプリケーションの web.xml で定義されたすべてのアプリケーション コンテキストは Web アプリケーション コンテキストであり、これはルート webapp コンテキストとサーブレットのアプリ コンテキストの両方に適用されます。
また、Web アプリケーションのコンテキスト機能によっては、アプリケーションのテストが少し難しくなる可能性があり、テストにはMockServletContextクラスを使用する必要がある場合があります。
サーブレット コンテキストとルート コンテキストの違い Spring では、マルチレベルのアプリケーション コンテキスト階層を構築できるため、必要な Bean が現在のアプリケーション コンテキストに存在しない場合は、親コンテキストからフェッチされます。デフォルトの Web アプリには、ルート コンテキストとサーブレット コンテキストの 2 つの階層レベルがあります。
これにより、一部のサービスをアプリケーション全体のシングルトンとして実行し (通常、Spring Security Bean と基本的なデータベース アクセス サービスはここに存在します)、別のサービスを対応するサーブレット内の分離されたサービスとして実行して、Bean 間の名前の競合を回避できます。たとえば、1 つのサーブレット コンテキストが Web ページを提供し、別のサーブレット コンテキストがステートレス Web サービスを実装します。
この 2 つのレベルの分離は、Spring サーブレット クラスを使用するときにすぐに使用できます。ルート アプリケーション コンテキストを構成するには、web.xml でcontext-paramタグを使用する必要があります。
<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 で宣言されているContextLoaderListenerによって作成されます。
<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 の違い
インターフェイスによって指定されるWeb アプリケーション コンテキストWebApplicationContext
は、Web アプリケーションの Spring アプリケーション コンテキストです。WebApplicationContext
インターフェースがインターフェースを拡張し、Web アプリケーションApplicationContext
の標準サーブレット API を取得するためのメソッドを追加することを考えると、これには通常の Spring アプリケーション コンテキストのすべてのプロパティがあります。ServletContext
標準の Spring Bean スコープsingleton
とprototype
に加えて、Web アプリケーション コンテキストで使用できる 3 つの追加スコープがあります。
request
- 単一の Bean 定義を単一の HTTP 要求のライフサイクルにスコープします。つまり、各 HTTP 要求には、単一の Bean 定義の背後から作成された Bean の独自のインスタンスがあります。session
- 単一の Bean 定義を HTTP セッションのライフサイクルにスコープしますapplication
- 単一の Bean 定義のスコープをServletContext