스프링 빈의 생명주기 관리
빈이 생성되거나 소멸되는 경우 특정한 작업을 하고싶은 경우가 있다.
예를 들어, 빈이 생성될 때 데이터베이스 커넥션 풀을 미리 생성하는 경우이다.
이러한 작업을 위해 스프링 빈의 초기화 작업과 종료 작업을 처리하는 방법을 알아보자.
스프링 빈의 이벤트사이클
스프링 컨테이너 생성 → 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 → 스프링 종료
초기화 콜백: 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출된다.
소멸전 콜백: 빈이 소멸되기 직전에 호출된다.
스프링 빈 생명주기 콜백 사용방법
- 인터페이스(InitializingBean, DisposableBean) 사용
- 설정 정보 초기화 메서드, 종료 메서드 지정
- @PostConstruct, @PreDestroy 사용
@PostConstruct, @PreDestroy
...
@PostConstruct
public void init() {
System.out.println("초기화 메서드 호출")
}
...
@PreDestroy
public void destroy() {
System.out.println("종료 메서드 호출")
}
@PostConstruct, @PreDestory 애노테이션 특징
- 최신 스프링에서 가장 권장하는 방법이다.
- 애노테이션 하나만 붙이면 되므로 매우 편리하다.
- 패키지를 잘 보면 javax.annotation.PostConstruct 이다. 스프링에 종속적인 기술이 아니라 JSR-250라는 자바 표준이다. 따라서 스프링이 아닌 다른 컨테이너에서도 동작한다.
- 컴포넌트 스캔과 잘 어울린다.
- 유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것이다. 외부 라이브러리를 초기화, 종료 해야 하면 @Bean의 기능을 사용하자.
'🍀Spring > 기본' 카테고리의 다른 글
[Spring] 의존관계 자동 주입 (0) | 2024.08.09 |
---|---|
[Spring] 컴포넌트 스캔 (0) | 2024.07.28 |
[Spring] 싱글톤 컨테이너 (0) | 2024.07.28 |
[Spring] 스프링 컨테이너와 스프링 빈 (0) | 2024.07.20 |
[Spring] 예제 만들기 - 객체 지향 원리 적용 (0) | 2024.07.19 |