객체 생성 ▶ 의존관계 주입
스프링 컨테이너 생성 ▶ 스프링 빈 생성 ▶ 의존관계 주입 ▶ 초기화 콜백 ▶ 사용 ▶ 소멸 전 콜백 ▶ 스프링 종료
@PostContruct
, @PreDstroy
애노테이션 지원InitializingBean 인터페이스: afterPropertiesSet()
의존관계가 주입되면 실행되는 메서드 ()
@Override public void afterPropertiesSet() throws Exception { }
DisposableBean 인터페이스: destroy()
Bean이 소멸될 때 실행되는 메서드
@Override public void destroy() throws Exception { }
💻 최근에는 더 나은 방법이 존재하기 때문에 사용 X
@Configuration
static class LifeCycleConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("http://hello-spring.dev");
return networkClient;
}
}
// 의존관계 주입이 끝나면 실행
public void init() throws Exception {
System.out.println("NetworkClient.init");
connect();
call("초기화 연결 메시지");
}
// 빈의 생명주기가 끝나면 실행
public void close() throws Exception {
System.out.println("NetworkClient.close");
disconnect();
}
성공
@Bean(destroyMethod)
@Bean
의 destroyMethod
의 기본값: (inferred)@PostConstruct
, @PreDestroy
@PreDestroy
public void close() throws Exception {
System.out.println("NetworkClient.close");
disconnect();
}
성공
▶
@PostConstruct
, @PreDestroy
를 사용하자!
코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 @Bean(initMethod, destroyMethod)
을 사용하자!