개발자 공부/🎀 스프링 공부

⭐️ @PostConstruct와 @PreDestroy 빈의 초기화 + 빈의 소멸

유정♡ 2024. 5. 29. 17:11

@PostConstruct, @PreDestroy 이 두 애노테이션을 사용하면 가장 편리하게 초기화와 종료를 실행할 수 있다.

 

[ @PostConstruct, @PreDestroy 애노테이션 특징 ]
최신 스프링에서 가장 권장하는 방법이다. 애노테이션 하나만 붙이면 되므로 매우 편리하다.
패키지를 잘 보면 `javax.annotation.PostConstruct` 이다. 스프링에 종속적인 기술이 아니라 JSR-250 라는 자바 표준이다. 따라서 스프링이 아닌 다른 컨테이너에서도 동작한다컴포넌트 스캔과 잘 어울린다.
유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것이다. 외부 라이브러리를 초기화, 종료 해야 하면 @Bean의 기능을 사용하자.

 

[ 정리 ]

@PostConstruct, @PreDestroy 애노테이션을 사용하자
코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 @BeaninitMethod, destroyMethod를 사용하자

 


@PostConstruct와 @PreDestroy 어노테이션은 스프링 프레임워크에서 빈의 초기화와 소멸 단계를 지정하는 데 사용됩니다. 이 두 어노테이션의 주요 차이점은 다음과 같습니다

 

[ @PostConstruct ]

  • @PostConstruct 어노테이션은 빈이 생성된 후 초기화 작업을 수행해야 할 때 메서드에 지정됩니다.
  • 해당 메서드는 빈이 생성된 후에 스프링 컨테이너에 의해 자동으로 호출됩니다.
  • 주로 빈의 초기화 작업을 수행하기 위해 사용됩니다. 이 작업에는 파일 읽기, 데이터베이스 초기화, 외부 서비스와의 연결 설정 등이 포함될 수 있습니다.
import javax.annotation.PostConstruct;

public class MyBean {

    @PostConstruct
    public void init() {
        // 빈 초기화 작업 수행
        System.out.println("MyBean initialized");
    }
}

 

위의 코드에서 init() 메서드는 @PostConstruct 어노테이션이 지정되어 있으므로, 해당 빈이 생성된 후 자동으로 호출됩니다.

 

 

[ @PreDestroy ]

  • @PreDestroy 어노테이션은 빈이 소멸되기 전에 정리 작업을 수행해야 할 때 메서드에 지정됩니다.
  • 해당 메서드는 빈이 소멸되기 직전에 스프링 컨테이너에 의해 자동으로 호출됩니다.
  • 주로 빈이 사용한 리소스를 해제하거나 외부 연결을 종료하는 등의 작업을 수행하기 위해 사용됩니다.
import javax.annotation.PreDestroy;

public class MyBean {

    @PreDestroy
    public void cleanup() {
        // 정리 작업 수행
        System.out.println("MyBean destroyed");
    }
}

 

위의 코드에서 cleanup() 메서드는 @PreDestroy 어노테이션이 지정되어 있으므로, 해당 빈이 소멸되기 직전에 자동으로 호출됩니다.

 

따라서, @PostConstruct 어노테이션은 빈의 초기화 작업을 수행하는 메서드를 지정하고,

            @PreDestroy 어노테이션은 빈의 소멸 전에 정리 작업을 수행하는 메서드를 지정합니다.

            이를 통해 빈의 생명주기에 관련된 작업을 간편하게 수행할 수 있습니다.

728x90