애노테이션으로 적용하는 방법인데 결론적으로 이 방법을 사용하면 됩니다. 스프링에서도 이 방법을 권고하고 있습니다.
애노테이션 이름만 봐도 명확합니다. (생성된 후에, 소멸되기 전에)
바로 코드로 봅시다.
package hello.core.lifecycle;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
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);
}
@PostConstruct
public void init() {
System.out.println("NetworkClient.init");
connect();
call("초기화 연결 메세지");
}
@PreDestroy
public void close() {
System.out.println("NetworkClient.close");
disconnect();
}
}
@PostConstruct, @PreDestory를 붙여주면 끝입니다.
실행을 해봅시다.
동일하게 동작함을 알 수 있습니다.
<aside> ❗ 여기선 패키지가 중요합니다.
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
javax로 되어있으면 자바 진영에서 공식적으로 지원하는 것 입니다. 스프링이 아니라 다른 컨테이너를 써도 그대로 적용이 됩니다.
</aside>
최신 스프링에서 가장 권장하는 방법입니다.
애노테이션 하나만 붙이면 되므로 매우 편리합니다.
패키지를 잘 보면 javax.annotation.PostConstruct 입니다. 스프링에 종속적인 기술이 아니라 JSR-250 라는 자바 표준입니다. 따라서 스프링이 아닌 다른 컨테이너에서도 동작합니다.
자바 표준이란 그냥 인터페이스의 모음이라고 보면 됩니다.