[ 빈 생명주기 콜백]
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고,
애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이
필요하다.
스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자.
간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. 실제로 네트워크에 연결하는
것은 아니고, 단순히 문자만 출력하도록 했다. 이 NetworkClient 는 애플리케이션 시작 시점에
connect() 를 호출해서 연결을 맺어두어야 하고, 애플리케이션이 종료되면 disConnect() 를 호출해서
연결을 끊어야 한다
[ PostConstruct, PreDestory]
@PostConstruct는 init과 같은 초기화역할, @PreDestory는 close와 같은 종료역할을 한다.
Spring에서 초기화, 종료를 사용할 때 이 어노테이션을 쓰는것을 권장한다
@PostConstruct와 @PreDestory의 특징
•
최신 스프링에서 가장 권장하는 방법
•
어노테이션 하나만 붙이면 되서 매우 편리
•
패키지를 보면 자바표준이라 스프링이 아닌 다른 컨테이너에서도 동작
•
컴포넌트 스캔과 잘어울림
•
유일한 단점은 외부 라이브러이에는 적용을 하지못함
package hello.core.lifecycle;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
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 + "msssage : " + message);
}
// 서비스 종료시 호출
public void disconnect() {
System.out.println("close" + url);
}
@PostConstruct
public void init() throws Exception {
System.out.println("NetworkClient.init");
connect();
call("초기화 연결 메시지");
}
@PreDestroy
public void close() throws Exception {
System.out.println("NetworkClient.close");
disconnect();
}
}
Java
복사