개발/Springboot

[Spring 핵심 원리 기본편] 8. 빈 생명주기 콜백(@PostConstruct, @PreDestroy)

윤J 2023. 8. 16. 03:00

- 객체 생성 -> 의존관계 주입 // 완료해야 필요한 데이터 사용할 수 있는 준비 완

- 따라서 의존관계 주입 완료 후 초기화 호출해야 함 -> 그 시점은 스프링이 콜백 메서드로 알려줌

- 객체의 생성과 초기화를 분리하자

 

스프링 빈의 이벤트 라이프사이클
스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백(의존관계 주입 완료 후 호출) -> 사용 소멸전 콜백(빈이 소멸되기 전에 호출) -> 스프링 종료

 

애노테이션 @PostConstruct, @PreDestroy -> 최근 스프링에서 권장하는 방법 ! 이거 써라

 

public class NetworkClient {

    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);
    }

    @PostConstruct
    public void init() {
        System.out.println("NetworkClient.init");
        connect();
        call("초기화 연결 메시지");
    }

    @PreDestroy
    public void close() {
        System.out.println("NetworkClient.close");
        disconnect();
    }
}