
Spring Bean은 생성되고, 의존관계 주입이 완료된 후, 초기화 콜백 메서드가 호출된다.
그리고, 사용이 끝나면 소멸 전 콜백 메서드가 호출된다.
InitializingBean::afterPropertiesSet() 메서드를 통해 초기화 콜백을 제공한다.DisposableBean::destroy() 메서드를 통해 소멸전 콜백을 제공한다.public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
public interface DisposableBean {
void destroy() throws Exception;
}
코드 예시
@Getter
public class NetworkClient1 implements InitializingBean, DisposableBean {
@Setter
private String url;
public NetworkClient1() {
System.out.println("생성자 호출, url = " + url);
}
/**
* 서비스 시작시 호출
*/
public void connect() {
System.out.println("connect: " + url);
}
public void call(String message) {
System.out.println("call: " + url + ", message = " + message);
}
/**
* 서비스 종료시 호출
*/
public void disconnect() {
System.out.println("close: " + url);
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(this.getClass().getSimpleName() + ": init");
connect();
call("초기화 연결 메시지");
}
@Override
public void destroy() throws Exception {
System.out.println(this.getClass().getSimpleName() + ": close");
disconnect();
}
}
@Bean 어노테이션을 사용하여 초기화 콜백, 소멸전 콜백 메서드를 지정할 수 있다.destroyMethod 기본값: (inferred)close, shutdown 메서드를 자동으로 호출한다.destroyMethod = "" 를 설정한다.@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient2 networkClient() {
NetworkClient2 networkClient = new NetworkClient2();
networkClient.setUrl("http://hello-spring.dev");
return networkClient;
}
@PostConstruct javax.annotation.PostConstruct@PreDestroy javax.annotation.PreDestroyJSR-250 Java 표준이다.
@Getter
public class NetworkClient3 {
@Setter
private String url;
public NetworkClient3() {
System.out.println("생성자 호출, url = " + url);
}
/**
* 서비스 시작시 호출
*/
public void connect() {
System.out.println("connect: " + url);
}
public void call(String message) {
System.out.println("call: " + url + ", message = " + message);
}
/**
* 서비스 종료시 호출
*/
public void disconnect() {
System.out.println("close: " + url);
}
@PostConstruct
public void init() {
System.out.println(this.getClass().getSimpleName() + ": init");
connect();
call("초기화 연결 메시지");
}
@PreDestroy
public void close() {
System.out.println(this.getClass().getSimpleName() + ": close");
disconnect();
}
}