春-豆のライフサイクル

春の豆のライフサイクルは理解しやすいです。Beanがインスタンス化されると、使用可能な状態にするために初期化を実行する必要がある場合があります。同様に、Beanが不要になり、コンテナから削除された場合、クリーンアップが必要になる場合があります。

Beanのインスタンス化とその破棄の間に舞台裏で行われるアクティビティのリストがありますが、この章では、Beanの初期化と破棄のときに必要な2つの重要なBeanライフサイクルコールバックメソッドについてのみ説明します。

Beanのセットアップとティアダウンを定義するには、<bean>を次のように宣言するだけです。 initmethod および/または destroy-methodパラメーター。init-method属性は、インスタンス化の直後にBeanで呼び出されるメソッドを指定します。同様に、destroymethodは、Beanがコンテナーから削除される直前に呼び出されるメソッドを指定します。

初期化コールバック

org.springframework.beans.factory.InitializingBeanインターフェースは、単一のメソッドを指定します-

void afterPropertiesSet() throws Exception;

したがって、上記のインターフェイスを実装するだけで、次のようにafterPropertiesSet()メソッド内で初期化作業を行うことができます。

public class ExampleBean implements InitializingBean {
   public void afterPropertiesSet() {
      // do some initialization work
   }
}

XMLベースの構成メタデータの場合、 init-methodvoid引数なしシグニチャを持つメソッドの名前を指定する属性。例-

<bean id = "exampleBean" class = "examples.ExampleBean" init-method = "init"/>

以下はクラス定義です-

public class ExampleBean {
   public void init() {
      // do some initialization work
   }
}

破壊コールバック

org.springframework.beans.factory.DisposableBeanインタフェースは、単一のメソッドを指定します-

void destroy() throws Exception;

したがって、上記のインターフェイスを実装するだけで、次のようにdestroy()メソッド内でファイナライズ作業を行うことができます。

public class ExampleBean implements DisposableBean {
   public void destroy() {
      // do some destruction work
   }
}

XMLベースの構成メタデータの場合、 destroy-methodvoid引数なしシグニチャを持つメソッドの名前を指定する属性。例-

<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>

以下はクラス定義です-

public class ExampleBean {
   public void destroy() {
      // do some destruction work
   }
}

Web以外のアプリケーション環境でSpringのIoCコンテナを使用している場合。たとえば、リッチクライアントデスクトップ環境では、シャットダウンフックをJVMに登録します。そうすることで、正常なシャットダウンが保証され、シングルトンBeanの関連するdestroyメソッドが呼び出されて、すべてのリソースが解放されます。

XML構成ではメソッドの命名に関して柔軟性が高いため、InitializingBeanまたはDisposableBeanコールバックを使用しないことをお勧めします。

動作するEclipseIDEを配置し、次の手順を実行してSpringアプリケーションを作成しましょう-

ステップ 説明
1 SpringExampleという名前のプロジェクトを作成し、の下にパッケージcom.tutorialspointを作成します。src 作成したプロジェクトのフォルダ。
2 Spring Hello Worldの例の章で説明されているように、[外部JARの追加]オプションを使用して必要なSpringライブラリを追加します。
3 com.tutorialspointパッケージの下にJavaクラスHelloWorldMainAppを作成します。
4 Beans構成ファイルBeans.xmlsrc フォルダ。
5 最後のステップは、すべてのJavaファイルとBean構成ファイルのコンテンツを作成し、以下で説明するようにアプリケーションを実行することです。

これがの内容です HelloWorld.java ファイル-

package com.tutorialspoint;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
   public void init(){
      System.out.println("Bean is going through init.");
   }
   public void destroy() {
      System.out.println("Bean will destroy now.");
   }
}

以下は、の内容です MainApp.javaファイル。ここで、シャットダウンフックを登録する必要がありますregisterShutdownHook()AbstractApplicationContextクラスで宣言されているメソッド。これにより、正常なシャットダウンが保証され、関連するdestroyメソッドが呼び出されます。

package com.tutorialspoint;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
      obj.getMessage();
      context.registerShutdownHook();
   }
}

以下は設定ファイルです Beans.xml initおよびdestroyメソッドに必要-

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" init-method = "init" 
      destroy-method = "destroy">
      <property name = "message" value = "Hello World!"/>
   </bean>

</beans>

ソースとBeanの構成ファイルの作成が完了したら、アプリケーションを実行しましょう。アプリケーションに問題がない場合は、次のメッセージが出力されます-

Bean is going through init.
Your Message : Hello World!
Bean will destroy now.

デフォルトの初期化および破棄メソッド

同じ名前の初期化メソッドや破棄メソッドを持つBeanが多すぎる場合は、宣言する必要はありません。 init-method そして destroy-method個々のBeanに。代わりに、フレームワークは、を使用してそのような状況を構成する柔軟性を提供しますdefault-init-method そして default-destroy-method <beans>要素の属性は次のとおりです-

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
   default-init-method = "init" 
   default-destroy-method = "destroy">

   <bean id = "..." class = "...">
      <!-- collaborators and configuration for this bean go here -->
   </bean>
   
</beans>