春-Beanのライフサイクル
Spring Beanのライフサイクルは簡単に理解できます。 Beanがインスタンス化されるとき、使用可能な状態にするために何らかの初期化を実行する必要がある場合があります。 同様に、Beanが不要になり、コンテナから削除されると、クリーンアップが必要になる場合があります。
Beanのインスタンス化とその破棄の間に舞台裏で行われるアクティビティのリストがありますが、この章では、Beanの初期化と破棄のときに必要な2つの重要なBeanライフサイクルコールバックメソッドについてのみ説明します。
Beanのセットアップとティアダウンを定義するには、 initmethod および/または destroy-method パラメーターで<bean>を宣言するだけです。 init-method属性は、インスタンス化の直後にBeanで呼び出されるメソッドを指定します。 同様に、destroymethodは、Beanがコンテナから削除される直前に呼び出されるメソッドを指定します。
初期化コールバック
org.springframework.beans.factory.InitializingBeanインターフェイスは、単一のメソッドを指定します-
したがって、次のようにafterPropertiesSet()メソッド内で上記のインターフェイスと初期化作業を簡単に実装できます-
XMLベースの構成メタデータの場合、 init-method 属性を使用して、引数なしの無効な署名を持つメソッドの名前を指定できます。 たとえば-
以下はクラス定義です-
破壊コールバック
_org.springframework.beans.factory.DisposableBean_インターフェイスは、単一のメソッドを指定します-
したがって、次のようにdestroy()メソッド内で上記のインターフェイスとファイナライズ作業を簡単に実装できます-
XMLベースの構成メタデータの場合、 destroy-method 属性を使用して、引数のないvoidシグネチャを持つメソッドの名前を指定できます。 たとえば-
以下はクラス定義です-
非Webアプリケーション環境でSpringのIoCコンテナーを使用している場合。たとえば、リッチクライアントデスクトップ環境では、シャットダウンフックをJVMに登録します。 これにより、正常なシャットダウンが保証され、シングルトンBeanの関連するdestroyメソッドが呼び出され、すべてのリソースが解放されます。
XML構成はメソッドの命名に関して非常に柔軟性があるため、InitializingBeanまたはDisposableBeanコールバックを使用しないことをお勧めします。
例
動作するEclipse IDEを用意し、次の手順を実行してSpringアプリケーションを作成します。
Steps | Description |
---|---|
1 | Create a project with a name SpringExample and create a package com.finddevguides under the *src *folder in the created project. |
2 | Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter. |
3 | Create Java classes HelloWorld and MainApp under the com.finddevguides package. |
4 | Create Beans configuration file Beans.xml under the* src* folder. |
5 | The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below. |
以下は MainApp.java ファイルの内容です。 ここでは、AbstractApplicationContextクラスで宣言されているシャットダウンフック* registerShutdownHook()*メソッドを登録する必要があります。 これにより、正常なシャットダウンが保証され、関連する破棄メソッドが呼び出されます。
以下は、initおよびdestroyメソッドに必要な構成ファイル Beans.xml です-
ソースおよびBean構成ファイルの作成が完了したら、アプリケーションを実行しましょう。 すべてがあなたのアプリケーションでうまくいけば、それは次のメッセージを印刷します-
デフォルトの初期化および破棄メソッド
同じ名前のメソッドを初期化および/または破棄するBeanが多すぎる場合、個々のBeanで init-method と destroy-method を宣言する必要はありません。 代わりに、フレームワークは、次のように<beans>要素の default-init-method および default-destroy-method 属性を使用して、このような状況を柔軟に構成できます-