- 해당 게시물은 인프런 "스프링 핵심 원리 - 기본편" 강의를 참고하여 작성한 글입니다.
- 자세한 코드 및 내용은 강의를 참고해 주시길 바랍니다.
강의링크 -> 스프링 핵심 원리 - 기본편 (김영한)
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션의 시작 시점에 필요한 연결을 미리 해두고 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 그러기 위해서 스프링 빈이 생성되거나 죽기 직전에 스프링이 빈 안에 있는 매서드를 호출해주는 기능이 존재한다.
스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공한다. 또 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다.
public class NetworkClient implements InitializingBean, DisposableBean {
...
// 의존 관계 주입이 완료된 후 호출
@Override
public void afterPropertiesSet() throws Exception {
connect();
call("초기화 연결 메시지");
}
// 빈이 소멸되기 직전 호출
@Override
public void destroy() throws Exception {
disconnect();
}
public class BeanLifeCycleTest {
...
@Configuration
static class LifeCycleConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient networkClient() {
...
}
}
}
@PostConstruct
public void init() throws Exception {
...
}
// 빈이 소멸되기 직전 호출
@PreDestroy
public void close() throws Exception {
...
}
=> @PostConstruct, @PreDestroy 애노테이션을 사용하되 코드를 코칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 @Bean의 initMetohd와 destroyMethod를 사용하자