空のライフサイクルコールバック
🔷 空のライフサイクルコールバック
アプリケーションの起動時(データベース接続プールやネットワークコンセントなど)に安全に接続が切断されるようにするには、
オブジェクトの初期化と終了が必要です.
🔷 スプリングシート内のイベントライフサイクル
スプリング・コンテナを使用して、「」を生成します.
勘定科目の「勘定科目」および「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」、「勘定科目」
🔸 スプリングキャビティとは、オブジェクトを作成し、依存注入を完了すると、必要なデータを使用する準備ができます.
🔸 初期化操作は、依存関係注入が完了した後に呼び出されます.
🔸 スプリングは、初期化が完了した時間とスプリングコンテナが終了する前にコールバック方法によってコールバックされる.
-コールバックの初期化:空を生成し、空の依存関係注入が完了した後に呼び出す
-消える前にコール:ビンが消える前にコール
🔹分離オブジェクトの作成と初期化
作成者は、パラメータとして必要な情報のみを受信し、メモリを割り当ててオブジェクトを作成します.
初期化は、生成された値を使用して外部接続を行うなど、いくつかの煩雑な操作を実行します.
オブジェクトの作成と初期化の部分を、ジェネレータ内で煩雑な操作を行うよりも、メンテナンスの観点から分離して作業するほうがよい.
🔷 スプリングの3種類の空のライフサイクルのコールバック方法
🔹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/スプリング-コア-原理-基本編#
Reference
この問題について(空のライフサイクルコールバック), 我々は、より多くの情報をここで見つけました https://velog.io/@hyunbenny/빈-생명주기-콜백テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol