코드 그라데이션

인터페이스 InitializingBean, DisposableBean 본문

Spring/핵심 원리 구현

인터페이스 InitializingBean, DisposableBean

완벽한 장면 2024. 2. 10. 18:04

 

 

NetworkClient

package inflearn.spring_core.lifecycle;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

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 {
        System.out.println("NetworkClient.afterPropertiesSet");
        connect();
        call("초기화 연결 메시지");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("NetworkClient.destroy");
        disConnect();
    }
}

soutm 으로 메서드 출력을 더 했다.

 

생성자에서는 객체를 초기화하고, setUrl 메서드를 통해 URL을 설정합니다. 

connect 메서드는 서비스 시작시 호출되어 URL에 연결하고, call 메서드는 메시지를 호출합니다. 

disConnect 메서드는 서비스 종료시 호출되어 연결을 해제합니다

 

 

실행 결과

생성자 호출, url = null
NetworkClient.afterPropertiesSet
connect: http://hello-spring.dev
call: http://hello-spring.dev message = 초기화 연결 메시지
19:50:52.985 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@43dac38f, started on Wed Oct 11 19:50:52 KST 2023
NetworkClient.destroy
close + http://hello-spring.dev
  • 출력 결과를 보면 초기화 메서드가 주입 완료 후에 적절하게 호출 된 것을 확인할 수 있다.
    그리고 스프링 컨테이너의 종료가 호출되자 소멸 메서드가 호출 된 것도 확인할 수 있다.

 

초기화, 소멸 인터페이스 단점

 

참고
 인터페이스를 사용하는 초기화, 종료 방법은 스프링 초창기에 나온 방법들이고,
 지금은 다음의 더 나은 방법들이 있어서  거의 사용하지 않는다.

 

728x90
Comments