1. 序章

Springを使用すると、Beanの作成と破棄にカスタムアクションをアタッチできます。 たとえば、InitializingBeanおよびDisposableBeanインターフェイスを実装することでこれを行うことができます。

このクイックチュートリアルでは、2番目の可能性である@PostConstructおよび@PreDestroyアノテーションについて説明します。

2. @PostConstruct

Springは、Beanプロパティの初期化の直後に@PostConstructで注釈が付けられたメソッドを1回だけ呼び出します。 これらのメソッドは、初期化するものがない場合でも実行されることに注意してください。

@PostConstruct でアノテーションが付けられたメソッドは、任意のアクセスレベルを持つことができますが、静的にすることはできません。

@PostConstruct の1つの可能な使用法は、データベースにデータを取り込むことです。 たとえば、開発中に、デフォルトのユーザーを作成したい場合があります。

@Component
public class DbInit {

    @Autowired
    private UserRepository userRepository;

    @PostConstruct
    private void postConstruct() {
        User admin = new User("admin", "admin password");
        User normalUser = new User("user", "user password");
        userRepository.save(admin, normalUser);
    }
}

上記の例では、最初に UserRepository を初期化し、次に@PostConstructメソッドを実行します。

3. @PreDestroy

@PreDestroy で注釈が付けられたメソッドは、SpringがアプリケーションコンテキストからBeanを削除する直前に1回だけ実行されます。

@PostConstruct と同様に、 @PreDestroy アノテーションが付けられたメソッドは、任意のアクセスレベルを持つことができますが、静的にすることはできません。

@Component
public class UserRepository {

    private DbConnection dbConnection;
    @PreDestroy
    public void preDestroy() {
        dbConnection.close();
    }
}

このメソッドの目的は、Beanが破棄される前に、リソースを解放するか、データベース接続を閉じるなどの他のクリーンアップタスクを実行することです。

4. Java9以降

@PostConstruct@PreDestroyの両方のアノテーションはJavaEEの一部であることに注意してください。 JavaEEはJava9で非推奨になり、Java 11で削除されたため、これらのアノテーションを使用するには、依存関係を追加する必要があります。

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

5. 結論

この短い記事では、@PostConstructおよび@PreDestroyアノテーションの使用方法を学びました。

いつものように、すべてのソースコードはGitHubで入手できます。