目次へ

3.3. ライフサイクル - リフレクション

前節で説明したように InitializingBean, DisposableBean を実装すれば初期化や後処理を行うことができます。しかし、既存のクラスを使用したい場合や Spring に依存させずに Bean を実装したいこともあります。そのような場合に対応できるよう Spring では任意のメソッドを呼び出すよう Bean 定義ファイルで設定が行えます。初期化のタイミングで呼び出したいメソッドがある場合は bean 要素の init-method 属性で、後処理のタイミングで呼び出したいメソッドがある場合は bean 要素の destroy-method 属性でメソッド名を指定します。

package com.techscore.spring.di05;

public class ExampleBean {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 初期化メソッド
     */
    public void initialize() {
        System.out.println(this.name + " is initialized...");
    }

    /**
     * 後処理を行うメソッド
     */
    public void dispose() {
        System.out.println(this.name + " is destroyed...");
    }
}

上記のクラスの初期化処理、後処理を行うには Bean 定義ファイルで以下のように設定します。

<bean id="exampleBean" class="com.techscore.spring.di05.ExampleBean"
      init-method="initialize" destroy-method="dispose">
  <property name="name">
    <value>hoge</value>
  </property>
</bean>

ただし、これらの呼び出せるメソッドには制限があり、init-method 属性で指定できるメソッドは引数なしのメソッドだけ、destroy-method 属性で指定できるメソッドは引数なしか、boolean 型の引数を 1つだけとるメソッドだけです。boolean 型の引数をとる場合引数には "true" が渡されます。いずれのメソッドも返り値はあってもなくても構いません。また、インタフェースの場合と同様に Bean が Singleton ではないときには destroy-method 属性で指定したメソッドは呼び出されません。

実習課題 3

以下のコンソールアプリケーションを Spring を使用して作成しなさい。

  • 任意のデータベースのテーブルデータ一覧を表示するプログラム
  • javax.sql.DataSource を実装する任意の DataSource を使用して Connection を取得すること
  • Bean 定義ファイルで初期化メソッドか後処理メソッドのうち少なくとも 1つを使用すること

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp