public class NetworkClient implements InitializingBean, DisposableBean {
private String url;
public NetworkClient() {
System.out.println("생성자 호출, url = " + url);
}
public void setUrl(String url) {
this.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("NetworkClient.afterPropertiesSet");
connect();
call("초기화 연결 메세지");
}
@Override
public void destroy() throws Exception {
System.out.println("NetworkClient.destroy");
disconnect();
}
}
InitializingBean
은 afterPropertiesSet()
메서드로 초기화를 지원한다.DisposableBean
은 destroy()
메서드로 소멸을 지원한다.생성자 호출, url = null
NetworkClient.afterPropertiesSet
connect: https://hello-spring.dev
call: https://hello-spring.dev message = 초기화 연결 메세지
18:34:49.903 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@27462a88, started on Sat Oct 01 18:34:49 KST 2022
NetworkClient.destroy
close: https://hello-spring.dev
인터페이스를 사용하는 초기화, 종료 방법은 스프링 초창기에 나온 방법들이고, 지금은 더 나은 방법들이 있어서 거의 사용하지 않는다.
설정 정보에 @Bean(initMethod = "init", destroyMethod = "close")
처럼 초기화, 소멸 메서드를 지정할 수 있다.
public class NetworkClient {
private String url;
public NetworkClient() {
System.out.println("생성자 호출, url = " + url);
}
public void setUrl(String url) {
this.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);
}
public void init() {
System.out.println("NetworkClient.init");
connect();
call("초기화 연결 메세지");
}
public void close() {
System.out.println("NetworkClient.close");
disconnect();
}
}
...
@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("https://hello-spring.dev");
return networkClient;
}
...
@Bean의 DestroyMethod
속성에는 아주 특별한 기능이 있다.close
, shutdown
이라는 이름의 종료 메서드를 사용한다.destroyMethod
는 기본값이 (inferred)
(추론)로 되어있다.close
, shutdown
이라는 이름의 메서드를 자동으로 호출해준다.destroyMethod=""
처럼 빈 공백을 저장하면 된다.