目次へ

3.2. ライフサイクル - インタフェース

プロパティ値をセットしたあとに何らかの初期化処理を行いたい場合があります。Spring では BeanFactory にそれらの処理を行わせるために org.springframework.beans.factory.InitializingBean インタフェースが用意されています。このインタフェースには afterPropertiesSet() というメソッドが宣言されています。また、Bean が破棄される前に何らかの後処理を行わせるために org.springframework.beans.factory.DisposableBean インタフェースが用意されています。このインタフェースには destroy() メソッドが宣言されています。

以下は InitializingBeanDisposableBean を実装した Bean の例です。

package com.techscore.spring.di;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class ExampleBean implements InitializingBean, DisposableBean {
    private String name;

    public String getName() {
        return name;
    }

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

    public void afterPropertiesSet() throws Exception {
        System.out.println(this.name + " is initialized...");
    }

    public void destroy() throws Exception {
        System.out.println(this.name + " is destroyed...");
    }
}

実行クラスの例を以下に示します。

package com.techscore.spring.di;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Main {
    public static void main(String[] args) {
        ClassPathResource res = new ClassPathResource(
                "com/techscore/spring/di/beans.xml");
        XmlBeanFactory factory = new XmlBeanFactory(res);
        ExampleBean bean = (ExampleBean) factory.getBean("exampleBean");

        System.out.println("name: " + bean.getName());
        factory.destroySingletons();
    }
}

BeanFactory から Bean を取り出すときに Bean が生成され、プロパティ値がセットされてから afterPropertiesSet() メソッドが呼び出されます。そして Bean が破棄されるときに destroy() メソッドが呼び出されます。

Bean を破棄するために呼び出しているメソッド destroySingletons() というメソッド名からわかるかもしれませんが、実は特にコーディングせずとも BeanFactory はデフォルトで Singleton となる Bean を生成します。Singleton ではなく Bean を取り出す際に新たにインスタンスを生成する場合は Bean 定義ファイルで以下のように指定します。

<bean id="exampleBean" class="com.techscore.spring.di.ExampleBean" singleton="false"/>

なお、DisposableBean#destroy() は Bean が Singleton の場合のみ有効です。

実習課題 2

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

  • 任意のデータベースのテーブルデータ一覧を表示するプログラム
  • InitializingBean, DisposableBean の両方を実装し、何らかの初期化処理・後処理を行うこと

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp