クラス SpringServletContainerInitializer
- 実装されたすべてのインターフェース:
ServletContainerInitializerEE
ServletContainerInitializer
EE は、従来の 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
- 関連事項:
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明void
onStartup
(SetSE<ClassSE<?>> webAppInitializerClasses, ServletContextEE servletContext) ServletContext
を、アプリケーションクラスパスに存在するWebApplicationInitializer
実装に委譲します。
コンストラクターの詳細
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
を委譲します。- 次で指定:
- インターフェース
ServletContainerInitializerEE
のonStartupEE
- パラメーター:
webAppInitializerClasses
- アプリケーションクラスパスにあるWebApplicationInitializer
のすべての実装servletContext
- 初期化されるサーブレットコンテキスト- 例外:
ServletExceptionEE
- 関連事項: