Basic#7 Bean LifeCycle Callback


7. Bean LifeCycle Callback


1. Bean LifeCycle callback


アプリケーションの起動時にデータベース接続またはネットワークsocket接続を事前に確立します.したがって、これらの接続を事前に準備または切断するには、beanの作成と終了時間を知る必要があります.
Spring Beanには、次のライフサイクルがあります.
Springコンテナ→Spring bean作成→DI→初期化コールバック→使用→破棄前コールバック→Spring終了
このためSpringでは,DIの後に必要なデータを利用できるため,コールバックにより時点を通知する機能を提供している.
オブジェクトの作成と初期化を分離しましょう.
ジェネレータはパラメータを受信し、メモリを割り当ててオブジェクトを作成します.(論理は通常簡単です)
これに対して、初期化と接続操作は煩雑なタスクを実行するため、メンテナンスの観点から管理を分離することが有利である.

2. Interface


Springが提供するインタフェースを使用してコールバックを使用できます.
  • InitializingBean
  • DisposableBean
  • 対応するインタフェースを継承することにより、afterPropertiesSet()およびdestory()の方法を上書きし、それぞれ開始/終了時に実行したい論理を呼び出せばよい.
    public class NetworkClient implements InitializingBean, DisposableBean {
    	@Override
        public void afterPropertiesSet(){
        	// DB 연결 
        }
        @Override
        public void destory() throws Exception {
        	// DB 연결 해제
        }
    }
    このインタフェースはspring専用インタフェースで、springに依存する問題があり、外部ライブラリには適用されません.そのため、今はあまり使われていない方法です.

    3.bean登録の初期化


    前に使用したメソッドは、インタフェース宣言のmethodを上書きすることによって実現されるため、メソッド名を変更することも外部ライブラリに適用することもできません.またspring専用インタフェースが継承されているため,コードに依存する.
    この問題を解決するには、beanオブジェクト上で任意に初期化/終了メソッドを作成し、設定情報としてロードして使用する方法があります.コードではなく構成情報を使用するためspringに依存せず、外部ライブラリにも適用できます.
    public class NetworkClient {
    	public void init(){
        	// DB 연결
        }
        
        public void close(){
        	// DB 연결 해제
        }
    }
    @Bean注記では、initメソッドとdestroyメソッドをメソッド名にマッピングすればよい.
    @Configuration
    public class LifeCycleConfig {
    	@Bean(initMethod = "init", destroyMethod = "close")
        public NetworkClient networkClient(){ return new NetowkrClient(); }
    ほとんどの方法は、closeまたはshutdownの名前で終了する方法である.detoyMethodのデフォルト値は(inferred)で、終了メソッドの名前がcloseまたはshutdownの場合は直接呼び出すことができます.

    4.Annotationの使用


    上記の手順は注釈だけでさらに短縮できます.initメソッドとdestroyメソッドにそれぞれ@PostContrcut@PreDestroyをマークすればよい.
    @PostConstruct
    public void init(){
    	// DB 연결
    }
    @PreDestroy
    public void close(){
    	// DB 연결 해제
    }
    🛠 更新を続行する必要があります
    2022.04.15首