パッケージ org.springframework.web

クラス SpringServletContainerInitializer

java.lang.ObjectSE
org.springframework.web.SpringServletContainerInitializer
実装されたすべてのインターフェース:
ServletContainerInitializerEE

public class SpringServletContainerInitializer extends ObjectSE implements ServletContainerInitializerEE
Spring が提供する ServletContainerInitializerEE は、従来の web.xml ベースのアプローチとは対照的に (または場合によっては組み合わせて) Spring の WebApplicationInitializer SPI を使用して、サーブレットコンテナーのコードベースの構成をサポートするように設計されています。

操作のメカニズム

このクラスは、ロードされてインスタンス化され、spring-web モジュール JAR がクラスパスに存在すると仮定して、コンテナーの起動時にサーブレット準拠のコンテナーによって onStartup(java.util.Set<java.lang.Class<?>>, jakarta.servlet.ServletContext) メソッドが呼び出されます。これは、spring-web モジュールの META-INF/services/jakarta.servlet.ServletContainerInitializer サービスプロバイダー構成ファイルを検出する JAR サービス API ServiceLoader.load(Class)SE メソッドによって発生します。

web.xml と組み合わせて

Web アプリケーションは、サーブレットアノテーションのスキャンを制御する web.xml の metadata-complete 属性または web.xml の <absolute-ordering> 要素を介して、起動時にサーブレットコンテナーが行うクラスパススキャンの量を制限することを選択できます。ServletContainerInitializer スキャンを実行できます。この機能を使用する場合、web.xml の名前付き Web フラグメントのリストに次のように "spring_web" を追加することにより、SpringServletContainerInitializer を有効にできます。
 <absolute-ordering>
   <name>some_web_fragment</name>
   <name>spring_web</name>
 </absolute-ordering>
 

Spring の WebApplicationInitializer との関連

Spring の WebApplicationInitializer SPI は、WebApplicationInitializer.onStartup(ServletContext) という 1 つのメソッドのみで構成されています。署名は意図的に ServletContainerInitializer.onStartup(Set, ServletContext)EE と非常によく似ています。簡単に言えば、SpringServletContainerInitializer は ServletContext をインスタンス化し、ユーザー定義の WebApplicationInitializer 実装に委譲するロールを果たします。ServletContext を初期化する実際の作業を行うのは、各 WebApplicationInitializer の責任です。委譲の正確なプロセスは、以下の onStartup のドキュメントで詳細に説明されています。

一般的な注意事項

一般に、このクラスは、より重要でユーザー向けの WebApplicationInitializer SPI のサポートインフラストラクチャと見なす必要があります。このコンテナー初期化子の利用も完全にオプションです。この初期化子がすべてのサーブレットランタイムで読み込まれ、呼び出されることは事実ですが、WebApplicationInitializer 実装をクラスパスで使用できるようにするかどうかは、ユーザーの選択のままです。WebApplicationInitializer 型が検出されない場合、このコンテナー初期化子は効果がありません。

このコンテナー初期化子と WebApplicationInitializer の使用は、型が spring-web モジュール JAR に含まれているという事実を除いて、Spring MVC に「結び付けられていない」ことに注意してください。むしろ、それらは ServletContext の便利なコードベースの構成を容易にする機能において汎用と見なすことができます。つまり、Spring MVC 固有のコンポーネントだけでなく、任意のサーブレット、リスナー、フィルターを WebApplicationInitializer 内に登録できます。

このクラスは拡張用に設計されておらず、拡張されることも意図していません。これは、WebApplicationInitializer が公開の SPI である内部型と見なされる必要があります。

関連事項

例と詳細な使用上の推奨事項については、WebApplicationInitializer Javadoc を参照してください。

導入:
3.1
作成者:
Chris Beams, Juergen Hoeller, Rossen Stoyanchev
関連事項:
  • コンストラクターの詳細

    • SpringServletContainerInitializer

      public SpringServletContainerInitializer()
  • メソッドの詳細

    • onStartup

      public void onStartup(@Nullable SetSE<ClassSE<?>> webAppInitializerClasses, ServletContextEE servletContext) throws ServletExceptionEE
      ServletContext を、アプリケーションクラスパスに存在する WebApplicationInitializer 実装に委譲します。

      このクラスは @HandlesTypes(WebApplicationInitializer.class) を宣言するため、サーブレットコンテナーはクラスパスを自動的にスキャンして Spring の WebApplicationInitializer インターフェースの実装を探し、そのようなすべての型のセットをこのメソッドの webAppInitializerClasses パラメーターに提供します。

      WebApplicationInitializer 実装がクラスパスに見つからない場合、このメソッドは事実上ノーオペレーションです。ServletContainerInitializer が実際に呼び出されましたが、WebApplicationInitializer 実装が見つからなかったことをユーザーに通知する INFO レベルのログメッセージが発行されます。

      1 つ以上の WebApplicationInitializer 型が検出されると仮定すると、それらはインスタンス化されます (@@Order アノテーションが存在する場合、または Ordered インターフェースが実装されている場合はソートされます)。次に、各インスタンスで WebApplicationInitializer.onStartup(ServletContext) メソッドが呼び出され、各インスタンスが Spring の DispatcherServlet などのサーブレット、Spring の ContextLoaderListener などのリスナー、またはフィルターなどのその他のサーブレット API 機能を登録および構成できるように、ServletContext を委譲します。

      次で指定:
      インターフェース ServletContainerInitializerEEonStartupEE 
      パラメーター:
      webAppInitializerClasses - アプリケーションクラスパスにある WebApplicationInitializer のすべての実装
      servletContext - 初期化されるサーブレットコンテキスト
      例外:
      ServletExceptionEE
      関連事項: