203

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

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

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

4

5 に答える 5

235

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 の違い

于 2012-07-29T12:35:00.827 に答える
4

インターフェイスによって指定されるWeb アプリケーション コンテキストWebApplicationContextは、Web アプリケーションの Spring アプリケーション コンテキストです。WebApplicationContextインターフェースがインターフェースを拡張し、Web アプリケーションApplicationContextの標準サーブレット API を取得するためのメソッドを追加することを考えると、これには通常の Spring アプリケーション コンテキストのすべてのプロパティがあります。ServletContext

標準の Spring Bean スコープsingletonprototypeに加えて、Web アプリケーション コンテキストで使用できる 3 つの追加スコープがあります。

  • request- 単一の Bean 定義を単一の HTTP 要求のライフサイクルにスコープします。つまり、各 HTTP 要求には、単一の Bean 定義の背後から作成された Bean の独自のインスタンスがあります。
  • session- 単一の Bean 定義を HTTP セッションのライフサイクルにスコープします
  • application- 単一の Bean 定義のスコープをServletContext
于 2019-08-12T11:20:46.470 に答える