Spring PostConstructおよびPreDestroyアノテーション

1. 前書き

Springでは、カスタムアクションをlink:/running-setup-logic-on-startup-in-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. Java 9

_ @ PostConstruct_と_ @ PreDestroy_の両方の注釈がJava EEの一部であることに注意してください。 また、https://www.baeldung.com/java-enterprise-evolution [Java EEはJava 9で非推奨]になり、Java 11で削除されたため、これらのアノテーションを使用するために追加の依存関係を追加する必要があります。
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

5. 結論

この短いチュートリアルでは、_ @ PreConstruct_および_ @ PreDestroy_アノテーションの使用方法を学びました。
いつものように、すべてのソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-core[GitHub]で入手できます。