1. 스프링 빈의 라이프 사이클
- 스프링 컨테이너 생성
- 스프링 빈 생성
- 의존관계 주입
- 초기화 콜백
- 사용
- 소멸전 콜백
- 스프링 종료
빈 생명주기 콜백 지원 방법
- 인터페이스(InitializingBean, DisposableBean)
- 초기화 및 종료 메서드를 설정 정보에 지정
@PostConstruct
, @PreDestroy
애노테이션 지원 ⭐️⭐️⭐️
2. 인터페이스(InitializingBean, DisposableBean)
public class NetworkClient implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {
connect();
call("초기화 연결 메시지");
}
@Override
public void destroy() throws Exception {
disConnect();
}
}
InitializingBean
: afterPropertiesSet()
메서드로 초기화 지원
DisposableBean
: destroy()
메서드로 소멸 지원
특징
- 스프링 전용 인터페이스
- 해당 코드가 스프링 전용 인터페이스에 의존
- 초기화, 소멸 메서드의 이름을 변경할 수 없음
- 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다.
→ 거의 사용 안 함
3. 초기화 및 종료 메서드를 설정 정보에 지정
public void init() {}
public void close() {}
@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient networkClient() {}
특징
- 메서드 이름을 자유롭게 줄 수 있음
- 스프링 빈이 스프링 코드에 의존하지 않음
- 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료
메서드를 적용할 수 있음
4. @PostConstruct
, @PreDestroy
애노테이션 지원
@PostConstruct
public void init() {}
@PreDestroy
public void close() {}
특징
- 최신 스프링에서 가장 권장하는 방법, 매우 편리
- 스프링이 아닌 다른 컨테이너에서도 동작한다.
- 컴포넌트 스캔과 잘 어울린다.
5. 결론
@PostConstruct
, @PreDestroy
애노테이션 지원을 사용하자❗️