테이터 베이스 커넥션 풀이나 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 해두고, 종료 시점에 연결을 종료하기 위해선, 객체의 초기화 종료 작업 필요
스프링 빈 이벤트 라이프 사이클
스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료
- 초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출
- 소멸전 콜백 : 빈이 소멸되기 전에 호출
!!! 객체의 생성과 초기화 분리하자 !!!
- 유지보수 관점에서 좋음
- 외부 커넥션 최초의 연결이 있고 난 후로 초기화를 지연시킬 수 있음
스프링이 지원하는 빈 생명 주기 콜백
인터페이스 InitializaingBean, DisposableBean
- 단점
- 스프링 전용 인터페이스에 의존
- 메서드 이름 변경 x
- 외부 라이브버리 적용 x
빈 등록 초기화, 소멸 메서드 지정
@Bean(initMethod = "init" , destoryMethod = "clodse" )
- 특징
- 메서드 이름은 자유롭다
- 스프링 빈이 스프링 코드에 의존 x
- 외부 라이브러리에서도 초기화 , 종료 메서드 사용 가능
- 종료 메서드 추론
- 라이브러리는 대부분 close, shutdown 이라는 이름의 종료 메서드 사용
- @Bean 의 destoryMethod 는 기본값이 (inferred) 로 등록
- close,shutdown 이름의 메서드 자동 호출
- 스프링 빈으로 등록하면, 종료 메서드 따로 호출할 필요 X
@PostConstruct, @PreDestory -> 이 방법 사용하자 !
- 특징
- 스프링이 아닌 다른 컨테이너에서도 동작
- 컴포넌트 스캔과 잘 어울린다
- 외부 라이브러리에 적용 x -> 필요하면 빈 등록 초기화, 소멸 메서드 지정하자