스프링 빈의 이벤트 라이프사이클은 다음과 같다
스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 사용전 콜백 - > 종료
참고:
스프링은 3가지 방법으로 빈 생명주기 콜백을 지원한다.
스프링 빈이 생성된 후에 초기화 작업이 필요하다면 InitializingBean
메서드를, 빈이 소멸되기 전에 작업이 필요하다면 DisposableBean
메서드를 사용하면 된다.
각각 스프링의 인터페이스 클래스를 구현하여 사용한다.
public class ExClass implements InitializingBean, DisposableBean {
// 필드, 메서드 및 생성자. . .
@Override
public void afterPropertiesSet() throws Exception {
// 빈 생성 직후 필요한 작업
}
@Override
public void destroy() throws Exception {
// 빈 소멸 직전 필요한 작업
}
}
이러한 인터페이스 방식은 최근에는 잘 사용하지 않는다.
@Bean
애노테이션에 속성값을 지정해 사용할 수 있다.
@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient networkClient(){
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("http://hello-spring.dev");
return networkClient;
}
빈 생성 후에는 NetworkClient 클래스의 init 메서드가, 빈 소멸 시에는 close 메서드가 실행된다.
이러한 방식은 스프링 빈이 스프링 코드에 의존하지 않다는 장점이 있다.
가장 권장되는 방식이다.
NetworkClient 클래스에서 빈 생성 후에 호출될 메서드에 @PostConstruct
애노테이션을, 소멸 전에 호출될 메서드에 @preDestroy
애노테이션을 붙인다.
@PostConstruct
public void init() {
// 빈 생성 후에 필요한 작업
}
@PreDestroy
public void close() {
// 빈 소멸 전에 필요한 작업
}
간단하고 편리한 방법으로, 스프링에 종속적인 기술이 아닌 자바 표준 기술이다. 최신 스프링에서 가장 권장되는 방법이다.
본 포스팅은 김영한 강사의 스프링 핵심 원리 강의를 수강하고 요약한 것으로, 해당 강의의 영상 및 강의자료를 참고하였습니다.