본문 바로가기
Spring/Spring Framework

빈 생명주기 관리하기 (@PostConstruct, @PreDestroy)

by chogigang 2023. 2. 27.

스프링 빈의 생명주기 관리

빈이 생성되거나 소멸되는 경우 특정한 작업을 하고싶은 경우가 있습니다.

하나의 예시로는 빈이 생성될 때 데이터베이스 커넥션 풀을 미리 생성하는 경우가 있습니다.

 

이미지 출처 https://javaslave.tistory.com/49

 

 

 

스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료

- 초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출

- 소멸전 콜백: 빈이 소멸되기 직전에 호출

 

 

 

스프링 빈은 크게 3가지 방법으로 빈 생명주기 콜백을 지원

- 인터페이스 (InitializingBean, DisposableBean)

- 설정정보 초기화 메서드, 종료 메서드 지정

- @PostConstruct, @PreDestroy

 

 

@PostConstruct

 

주석은 다음 이후에 호출되어야 하는 메서드를 나타내는 데 사용됩니다. bean이 구성되었고 모든 종속성이 주입되었습니다. 이 메소드는 Bean에 대한 사용자 정의 초기화 논리를 수행하는 데 사용할 수 있습니다.

 

 

 

 

@PreDestroy

 

주석은 Bean이 소멸되기 전에 호출해야 하는 메소드를 나타내는 데 사용됩니다. 이 메서드는 빈에 대한 사용자 지정 정리 또는 종료 논리를 수행하는 데 사용할 수 있습니다.

 

 

@Component
class SomeClass{
    private com.cho.Spring.Framework.Bean.SomeDependency someDependency;

    public  SomeClass(com.cho.Spring.Framework.Bean.SomeDependency someDependency) {
        super();
        this.someDependency = someDependency;
        System.out.println("All dependency are ready!");
    }
    @PostConstruct//의존성 주입이 완료되어 초기호가 수행된 후 실행되어야 하는  메소드에서 사용
    public void initalize(){
        someDependency.getReady();
    }
    @PreDestroy// 인스턴스가 컨테이너에 의해 제거 되고  있다는 신호에대한 콜백 알림
    public void cleanup() {
        System.out.println("Cleanup");
    }

}

@Component
class SomeDependency{
    public void getReady(){
        System.out.println("Some logic using SomeDependency");
    }
}