[Spring] PostConstruct, PreDestory

내용
@PostConstruct
@PreDestory
진행일시
2022/08/15
속성

[ 빈 생명주기 콜백]

데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. 실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 했다. 이 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
복사