クラス ContextLoader

java.lang.ObjectSE
org.springframework.web.context.ContextLoader
既知の直属サブクラス
ContextLoaderListener

public class ContextLoader extends ObjectSE
ルートアプリケーションコンテキストの実際の初期化作業を実行します。ContextLoaderListener によって呼び出されます。

web.xml context-param レベルで "contextClass" パラメーターを探してコンテキストクラス型を指定し、見つからない場合は XmlWebApplicationContext にフォールバックします。デフォルトの ContextLoader 実装では、指定されたコンテキストクラスは ConfigurableWebApplicationContext インターフェースを実装する必要があります。

"contextConfigLocation" コンテキストパラメーターを処理し、その値をコンテキストインスタンスに渡して、複数のファイルパスに解析します。複数のファイルパスは、任意の数のコンマとスペースで区切ることができます (例: "WEB-INF/applicationContext1.xml, WEB-INF/applicationContext2.xml")。Ant スタイルのパスパターンもサポートされています (例: "WEB-INF/*Context.xml,WEB-INF/spring*.xml" または "WEB-INF/**/*Context.xml"")。明示的に指定されていない場合、コンテキスト実装はデフォルトの場所 (XmlWebApplicationContext の場合: "/WEB-INF/applicationContext.xml") を使用します。

メモ: 複数の構成場所がある場合、少なくとも Spring のデフォルトの ApplicationContext 実装の 1 つを使用している場合、後の Bean 定義は以前にロードされたファイルで定義されたものをオーバーライドします。これを利用して、追加の XML ファイルを介して特定の Bean 定義を意図的に上書きできます。

ルートアプリケーションコンテキストのロードに加えて、このクラスはオプションで、共有親コンテキストをロードまたは取得して、ルートアプリケーションコンテキストにフックできます。詳細については、loadParentContext(ServletContext) メソッドを参照してください。

ContextLoader は、ContextLoader(WebApplicationContext) コンストラクターを介したルート Web アプリケーションコンテキストの注入をサポートし、サーブレット初期化子でのプログラムによる構成を可能にします。使用例については、WebApplicationInitializer を参照してください。

導入:
17.02.2003
作成者:
Juergen Hoeller, Colin Sampaleanu, Sam Brannen
関連事項:
  • フィールドの詳細

  • コンストラクターの詳細

    • ContextLoader

      public ContextLoader()
      "contextClass" および "contextConfigLocation" サーブレットコンテキストパラメーターに基づいて Web アプリケーションコンテキストを作成する新しい ContextLoader を作成します。それぞれのデフォルト値の詳細については、クラスレベルのドキュメントを参照してください。

      このコンストラクターは通常、引数なしのコンストラクターが必要であるため、 ContextLoaderListener サブクラスを web.xml 内の <listener> として宣言するときに使用されます。

      作成されたアプリケーションコンテキストは属性名 WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE で ServletContext に登録され、サブクラスはコンテナーのシャットダウン時に closeWebApplicationContext(ServletContext) メソッドを自由に呼び出してアプリケーションコンテキストを閉じることができます。

      関連事項:
    • ContextLoader

      public ContextLoader(WebApplicationContext rootContext)
      指定されたアプリケーションコンテキストで新しい ContextLoader を作成します。このコンストラクターは、ServletContext.addListener(String) API を介してインスタンスベースのリスナー登録が可能なサーブレット初期化子で役立ちます。

      コンテキストはまだリフレッシュされている場合とされていない場合があります。(a)ConfigurableWebApplicationContext の実装であり、(b)がまだリフレッシュされていない場合(推奨されるアプローチ)、次のことが発生します。

      コンテキストがすでにリフレッシュされているか、ConfigurableWebApplicationContext を実装していない場合、ユーザーが特定のニーズに応じてこれらのアクションを実行した(または実行しない)という仮定では、上記のいずれも発生しません。

      使用例については、WebApplicationInitializer を参照してください。

      いずれの場合も、指定されたアプリケーションコンテキストは属性名 WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE で ServletContext に登録され、サブクラスはコンテナーのシャットダウン時に closeWebApplicationContext(ServletContext) メソッドを自由に呼び出してアプリケーションコンテキストを閉じることができます。

      パラメーター:
      rootContext - 管理するアプリケーションコンテキスト
      関連事項:
  • メソッドの詳細

    • setContextInitializers

      public void setContextInitializers(ApplicationContextInitializer<?> @Nullable ... initializers)
      この ContextLoader で使用されるアプリケーションコンテキストを初期化するために使用する ApplicationContextInitializer インスタンスを指定します。
      導入:
      4.2
      関連事項:
    • initWebApplicationContext

      public WebApplicationContext initWebApplicationContext(jakarta.servlet.ServletContext servletContext)
      構築時に提供されたアプリケーションコンテキストを使用して、指定されたサーブレットコンテキストの Spring の Web アプリケーションコンテキストを初期化するか、"contextClass" および "contextConfigLocation" context-params に従って新しいものを作成します。
      パラメーター:
      servletContext - 現在のサーブレットコンテキスト
      戻り値:
      新しい WebApplicationContext
      関連事項:
    • createWebApplicationContext

      protected WebApplicationContext createWebApplicationContext(jakarta.servlet.ServletContext sc)
      このローダーのルート WebApplicationContext を、デフォルトのコンテキストクラスまたは指定されている場合はカスタムコンテキストクラスのいずれかでインスタンス化します。

      この実装は、カスタムコンテキストが ConfigurableWebApplicationContext インターフェースを実装することを期待しています。サブクラスでオーバーライドできます。

      さらに、customizeContext(ServletContext, ConfigurableWebApplicationContext) はコンテキストをリフレッシュする前に呼び出されるため、サブクラスはコンテキストにカスタム変更を実行できます。

      パラメーター:
      sc - 現在のサーブレットコンテキスト
      戻り値:
      ルート WebApplicationContext
      関連事項:
    • determineContextClass

      protected ClassSE<?> determineContextClass(jakarta.servlet.ServletContext servletContext)
      使用する WebApplicationContext 実装クラス(デフォルトの XmlWebApplicationContext または指定されている場合はカスタムコンテキストクラス)を返します。
      パラメーター:
      servletContext - 現在のサーブレットコンテキスト
      戻り値:
      使用する WebApplicationContext 実装クラス
      関連事項:
    • configureAndRefreshWebApplicationContext

      protected void configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext wac, jakarta.servlet.ServletContext sc)
    • customizeContext

      protected void customizeContext(jakarta.servlet.ServletContext sc, ConfigurableWebApplicationContext wac)
      構成の場所がコンテキストに提供された後、コンテキストがリフレッシュされる前に、この ContextLoader によって作成された ConfigurableWebApplicationContext をカスタマイズします。

      デフォルトの実装は、コンテキスト初期化子クラス(存在する場合)がコンテキスト初期化パラメーターを介して指定されていることを判別し、特定の Web アプリケーションコンテキストでそれぞれを呼び出します。

      Ordered を実装する、または @Order でマークされた ApplicationContextInitializers は、適切にソートされます。

      パラメーター:
      sc - 現在のサーブレットコンテキスト
      wac - 新しく作成されたアプリケーションコンテキスト
      関連事項:
    • determineContextInitializerClasses

      protected ListSE<ClassSE<ApplicationContextInitializer<ConfigurableApplicationContext>>> determineContextInitializerClasses(jakarta.servlet.ServletContext servletContext)
      CONTEXT_INITIALIZER_CLASSES_PARAM で指定されている場合に使用する ApplicationContextInitializer 実装クラスを返します。
      パラメーター:
      servletContext - 現在のサーブレットコンテキスト
      関連事項:
    • loadParentContext

      protected @Nullable ApplicationContext loadParentContext(jakarta.servlet.ServletContext servletContext)
      ルート WebApplicationContext の親コンテキストとして使用される ApplicationContext インスタンスをロードまたは取得するための、デフォルトの実装(サブクラスによってオーバーライドされる可能性がある)を持つテンプレートメソッド。メソッドからの戻り値が null の場合、親コンテキストは設定されません。

      ここで親コンテキストをロードする主な理由は、複数のルート Web アプリケーションコンテキストをすべて共有 EAR コンテキストの子にできるようにするか、EJB から見える同じ親コンテキストも共有できるようにするためです。純粋な Web アプリケーションの場合、通常、ルート Web アプリケーションコンテキストへの親コンテキストを持つことを心配する必要はありません。

      デフォルトの実装は、5.0 以降、単に null を返します。

      パラメーター:
      servletContext - 現在のサーブレットコンテキスト
      戻り値:
      親アプリケーションコンテキスト。ない場合は null 
    • closeWebApplicationContext

      public void closeWebApplicationContext(jakarta.servlet.ServletContext servletContext)
      指定されたサーブレットコンテキストの Spring の Web アプリケーションコンテキストを閉じます。

      loadParentContext(ServletContext) をオーバーライドする場合は、このメソッドもオーバーライドする必要がある場合があります。

      パラメーター:
      servletContext - WebApplicationContext が実行される ServletContext
    • getCurrentWebApplicationContext

      public static @Nullable WebApplicationContext getCurrentWebApplicationContext()
      現在のスレッドの Spring ルート Web アプリケーションコンテキストを取得します(つまり、現在のスレッドのコンテキスト ClassLoader です。これは、Web アプリケーションの ClassLoader である必要があります)。
      戻り値:
      現在のルート Web アプリケーションコンテキスト。見つからない場合は null 
      関連事項: