ContextLoaderListenerのロードプロセス(最も詳細なバージョン)
ContextLoaderListener は Web アプリケーションのコンテキストのロード処理を監視するサーブレットリスナーであり、Web アプリケーションのルートのアプリケーションコンテキストのロードと初期化を担当し、アプリケーション全体からアクセスできるように、ServletContext に格納します。
ContextLoaderListener ロードプロセスの詳細な手順を以下に示します
- Webアプリケーションが起動した時、コンテナはServletContextオブジェクトを作成し、それをContextLoaderListenerのcontextInitialized(ServletContextEvent event)メソッドに渡す。
- ContextLoaderListenerはcontextInitializedメソッドで、ルートアプリケーションコンテキストのロードと初期化に利用されるWebApplicationContextインスタンスを作成します。
- ContextLoaderListenerは設定ファイルの指定に従って、WebApplicationContextの実装にXmlWebApplicationContextまたはAnnotationConfigWebApplicationContextを使用します。XmlWebApplicationContextはXMLファイルからBean定義を読み込むために使用され、 AnnotationConfigWebApplicationContextはアノテーション設定に基づいてBean定義を読み込むために使用されます。
- ContextLoaderListenerは、設定ファイルの場所にResourceLoaderを作成して、設定ファイルを読み込みます。通常、設定ファイルはclasspath内の1つ以上のXMLファイルに配置されています。
- ContextLoaderListenerは、ResourceLoaderを使用して設定ファイルを読み込み、WebApplicationContextのloadBeanDefinitions(Resource resource)メソッドに渡してBean定義をルートアプリケーションコンテキストに読み込みます。
- WebApplicationContextは、loadBeanDefinitionsメソッドにおいて設定ファイルを解析し、Bean定義に基づいてBeanインスタンスを作成・初期化します。これには、Beanをインスタンス化し、依存関係を解決し、Beanのプロパティ値を設定することが含まれます。
- すべての Bean 定義が読み込まれた後、ルートアプリケーションコンテキストは初期化され、準備が完了します。
- ServletContext にルートアプリケーションコンテキストを保持し、ServletContext オブジェクトを介して全アプリケーションでルートアプリケーションコンテキストにアクセスできるようにします。
- Webアプリケーションのシャットダウン時に、コンテナはContextLoaderListener の contextDestroyed(ServletContextEvent event) メソッドを呼び出します。
- ContextDestroyedメソッドでは、ContextLoaderListenerはルートアプリケーションコンテキストを破棄し、アプリケーションの正常なシャットダウンを確実にするために関連リソースを解放します。
ContextLoaderListener のロード手順は、WebApplicationContext の作成、設定ファイルの読み込み、Bean インスタンスの解析・作成、ルートアプリケーションコンテキストの初期化とそのServletContextへの保持からなります。これによりルートアプリケーションコンテキストは、ServletContext オブジェクト経由でアプリケーション全体からアクセスできるようになります。