空のライフサイクルコールバック


🔷 空のライフサイクルコールバック


アプリケーションの起動時(データベース接続プールやネットワークコンセントなど)に安全に接続が切断されるようにするには、
オブジェクトの初期化と終了が必要です.

🔷 スプリングシート内のイベントライフサイクル


スプリング・コンテナを使用して、「」を生成します.
勘定科目の「勘定科目」および「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」
🔸 スプリングキャビティとは、オブジェクトを作成し、依存注入を完了すると、必要なデータを使用する準備ができます.
🔸 初期化操作は、依存関係注入が完了した後に呼び出されます.
🔸 スプリングは、初期化が完了した時間とスプリングコンテナが終了する前にコールバック方法によってコールバックされる.
-コールバックの初期化:空を生成し、空の依存関係注入が完了した後に呼び出す
-消える前にコール:ビンが消える前にコール
🔹分離オブジェクトの作成と初期化
作成者は、パラメータとして必要な情報のみを受信し、メモリを割り当ててオブジェクトを作成します.
初期化は、生成された値を使用して外部接続を行うなど、いくつかの煩雑な操作を実行します.
オブジェクトの作成と初期化の部分を、ジェネレータ内で煩雑な操作を行うよりも、メンテナンスの観点から分離して作業するほうがよい.

🔷 スプリングの3種類の空のライフサイクルのコールバック方法

  • インタフェース(InitializingBean,DisposableBean)
  • 情報の初期化方法を設定し、終了方法
  • を指定する.
  • @PostConstruct, @PreDestroy
  • 🔹1.initializingbean(開始)、DisposableBean(終了)

    public class NetworkClient implements InitializingBean, DisposableBean{
    	private String url;
        public NetworkClient(){
        	System.out.println("생성자 호출, url = " + url );
        }
        public void setUrl(String url){
        	this.url = url;
        }
        // 서비스 시작 시 호출
        public void connect(){
        	System.out.println("connect : " + url );
        }
        public void call(String message){
        	System.out.println("call : " + url + "message : " + message);
    }
    	// 서비스 종료 시 호출 
        public void disconnect(){
        	System.out.println("close : " + url);
        }
    
        @Override
        public void afterPropertiesSet() throws Exception{
        	connect();
            call("초기화 연결 메시지");
        }
        @Override
        public void destroy() throws Exception{
        	disconnect();
        }
       
    
    @Configuration
    static class LifeCycleConfig{
    	@Bean 
        public NetworkClient networkClient(){
        	NetworkClient networkClient = new NetworkClient();
            networkClient.setUrl("http://hello-spring.dev");
            return networkClinet;
    🔸InitializingBean-afterProperties Set():スプリングシートの初期化をサポートします.
    🔸DisposableBean-destroy():スプリングシートの破棄をサポートします.
    🔸 モノトーンの空なので、スプリングコンテナを作成すると空になります.
    プロパティ設定が完了するとafterProperties()が呼び出されます.
    空の終了時にdestroy()が呼び出されます.
    🔸 インタフェースの初期化、消灯の欠点
    1. spring 전용 인터페이스라서 내 코드를 전부 스프링 전용 인터페이스에 의존적으로 설계해야 함.
    2. 초기화, 소멸 메서드의 이름을 변경할 수 없다.
    3. 외부 라이브러리에 의존할 수 없다. 
    もっと良い方法がたくさんありますが、今はほとんど使いません.

    🔹 2.設定情報に空の初期化、空の消去方法を指定する

    public class NetworkClient implements InitializingBean, DisposableBean{
    	....
       
    	public void init() throws Exception{
        	connect();
            call("초기화 연결 메시지");
        }
        public void close() throws Exception{
        	disconnect();
        }
       
       
    @Configuration
    static class LifeCycleConfig{
    	@Bean(initMethod = "init", destroyMethod = "close")
    	public NetworkClient networkClient(){
    		NetworkClient networkClient = new NetworkClient();
    		networkClient.setUrl("http://hello-spring.dev");
    		return networkClient;
    	}
    }
    🔸 設定情報の使用時のプロパティ
    1. 메서드 이름을 자유롭게 줄 수 있다. 
    2. 스프링 빈이 스프링 코드에 의존하지 않는다. 
    3. 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부라이브러리에도 초기화, 종료 메서드를 적용할 수 있다. (가장 큰 장점)
    🔸 設定情報を使用する場合のdestroy()の特徴
    외부 라이브러리의 대부분은 'close', 'shutdown'이라는 이름으로 종료메서드를 사용한다.
    destroy()의 default값 : INFER_METHOD = (inferred)
    inferred(추론)의 기능 : 'close', 'shutdown'과 같은 이름의 메서드를 추론해서 자동으로 호출해준다.
    ➡️ 직접 스프링 빈으로 등록 시, 종료 메서드는 따로 적어주지 않아도 정상 동작한다.

    🔹 3.コメント@PostConstructor,@Predestroy()を使用

    public class NetworkClient implements InitializingBean, DisposableBean{
    	....
      
        @PostConstructor
        public void init() throws Exception{
        	connect();
            call("초기화 연결 메시지");
        }
        @PreDestroy
        public void close() throws Exception{
        	disconnect();
        }
       
       
    @Configuration
    static class LifeCycleConfig{
    	@Bean
    	public NetworkClient networkClient(){
    		NetworkClient networkClient = new NetworkClient();
    		networkClient.setUrl("http://hello-spring.dev");
    		return networkClient;
    	}
    }
    🔸 オートメーション特性
    1. 패키지가 'javax.annotation.PostConstructor'이기 때문에 스프링 종속 기술이 아니라 자바표준 기술이다. ➡️ 스프링이 아닌 다른 컨테이너에서도 잘 동작함.
    2. 컴포넌트 스캔과 잘 어울린다.
    3. 외부라이브러리에 적용하지 못한다는 단점 ➡️ 외부 라이브러리를 초기화, 종료해야 할 때는 2번의 빈 설정 정보에 지정하는 방법을 사용하자.
    スプリング推奨の最適な方法
    https://www.inflearn.com/course/スプリング-コア-原理-基本編#