[Spring] @PostConstruct, @PreDestroy 와 컴포넌트 스캔의 궁합

2025. 5. 19. 17:00·Spring/Core

https://bdisappointed.tistory.com/113

 

[Spring] Bean 생명주기와 콜백

스프링 빈의 이벤트 라이프 사이클스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존 관계 주입 -> 초기화 콜백 -> 빈 사용 -> 소멸 전 콜백 -> 스프링 셧다운초기화 콜백 : 빈이 생성 되고, 빈의 의존

bdisappointed.tistory.com

이전 포스팅과 연결 된다.


이번엔 초기화 + 소멸의 3번째 방법이자 가장 널리 쓰이고 있는 방법인 @PostConstruct, @PreDestroy 방식이다.

사용법

아래와 같이 초기화 , 소멸 메서드에 해당 에노테이션들을 붙여주면 된다.

특징으로는 다음과 같은데,

1. 자바 표준방식이라 스프링에 종속 X

2. 에노테이션 하나만 붙이면 끝 -> 개편하다

3. 컴포넌트 스캔과 궁합이 좋음 -> 이해 잘 안감

4. 단점 : 외부 라이브러리 적용 불가 -> 이전 포스팅에서 언급했던 @Bean에 옵션을 추가하자 (구현되어 있는 메서드 명을 입력해주기만 하면 된다)

 


왜 컴포넌트 스캔과 궁합이 좋은가?

컴포넌트 스캔은 @Component, @Service 등으로 마킹된 클래스를 자동으로 빈으로 등록한다. -> 이때 빈의 초기화나 소멸 시점에 특정 작업이 필요할 때, @PostConstruct와 @PreDestroy를 사용하면 추가로 설정이나 인터페이스 구현 없이도 해당 메서드가 자동으로 호출 된다.

그래서 이 둘이 왜 잘어울리는가?

- 컴포넌트 스캔은 Config 파일에 직접 클래스를 명시하지 않고도 빈을 등록한다 -> @PostConstruct와 @PreDestroy 와 같은 애노테이션 추가만으로 추가 설정 없이 동작 가능하다.

- 또한 가장 중요한 관심사의 분리를 적용할 수 있는데 , 빈의 생성 이나 소멸에 대한 인터페이스를 구현하지 않고 각 클래스 내부에 명확하게 해당 메서드를 표현할 수 있기 때문에 코드의 응집도가 상승한다.

- 해당 애노테이션을 통해 스프링 컨테이너가 자동으로 해당 빈의 라이프 사이클을 관리해주므로 개발자는 빈의 라이프 사이클에 신경 쓰지 않아도 된다

- 해당 기능은 빈 생성시 한번, 소멸 전 한번 씩만 딱 실행 되므로 초기화 / 정리 작업에 아주 최적화 되어 있다.

 

정리하면, 다음 코드의 주석과 같다.

@Component
public class InitEx {

    // 1. 의존성 주입 받음
    @Autowired
    private UserRepository userRepository; 

	// 2. 초기화 단계로써 <생성자 -> 의존성 주입> 단계가 끝나면 최초 1회 실행됨
    @PostConstruct 
    private void init() { 
        // 초기화 코드 (예: 기본 사용자 등록)
    }
	
 /*해당 빈을 사용하는 텀이라고 가정*/

	// 3. 빈 소멸 직전 1회 실행
    @PreDestroy
    private void cleanup() {
        // 리소스 정리 코드
    }
}

한 코드 안에서 라이프 사이클 조절이 가능하다 ! -> 관리에 매우매우 효율적


결과

이전 포스팅의 1번 , 2번, 3번 방법 모두 똑같은 결과를 볼 수 있다.

 

결론적으로, @PostConstruct와 @PreDestroy 을 쓰고, 외부 라이브러리에서 초기화 및 소멸 메서드를 사용하고자 한다면 2번 방법인 @Bean의 옵션 추가를 고려하자.

'Spring > Core' 카테고리의 다른 글

[Spring] BeanFactory와 ApplicationContext  (0) 2025.05.25
[Spring] Bean 생명주기와 콜백  (0) 2025.05.19
'Spring/Core' 카테고리의 다른 글
  • [Spring] BeanFactory와 ApplicationContext
  • [Spring] Bean 생명주기와 콜백
xub2
xub2
//given //when //then
  • xub2
    xublog
    xub2
  • 전체
    오늘
    어제
    • 전체 글 모아보기 (123) N
      • 잡담 (9)
      • 도전 , 자격증 (2)
      • Error (3)
      • Java (22)
      • Spring (4)
        • Core (3)
        • MVC (1)
      • DataBase (6)
        • Database Modeling (4)
        • SQL (2)
      • HTTP (11) N
      • Network (17)
      • Software Engineering (3)
      • Operating System (3)
      • Algorithm (16)
      • Project (9)
        • Web (0)
        • iOS (8)
        • Python (1)
      • A.I (13)
      • Linux (5)
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
xub2
[Spring] @PostConstruct, @PreDestroy 와 컴포넌트 스캔의 궁합
상단으로

티스토리툴바