빈 생명주기 콜백 시작
빈 생명주기 콜백에 대해 알아보자
생명주기 콜백 자체는 간단하다.
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 미리 필요한 연결을 해두고, 애플리케이션 종료에 연결을 모두 종료하는 작업을 하려면 객체의 초기화와 종료 작업이 필요하다.
💡 DB의 커넥션 객체는 생성에 시간이 오래걸려 미리 커넥션 객체들을 다 호출해서 만들어놓고 커넥션 풀등에 넣어놔 사용하곤 한다.
생명주기 콜백이란, 생성되고 종료될때 이뤄지는 초기화, 종료작업들을 말한다.
외부 서버와 연결된다 치고 빈을 하나 구상해보자. connect를 얻어오는 것 보니 DAO객체인듯 하다.
package hello.core.lifesycle;
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);
}
}
위 객체의 생성자 호출시, connect() 메서드를 호출하며 생성과 동시에 미리 외부 DB든 뭐든 connection을 얻어오게끔 해보자.
public NetworkClient() {
System.out.println("생성자 호출, url = " + url);
connect();
call("초기화 연결 메세지");
}
위의 클래스를 빈으로 등록해보자.
package hello.core.lifesycle;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
public class BeanLifeCycleTest { //빈으로 등록해보기 위한 테스트
@Test
public void lifeCycleTest() {
}
@Configuration
static class LifeCycleConfig {
@Bean
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("<http://hello-spring.dev>");
return networkClient;
}
}
}
빈으로 등록해보기 위해 임시 설정정보를 만들어 빈으로 등록했다. 이때 단순 생성자만 사용한게 아니라, 빈 생성 패턴중 하나인 instance팩토리 메서드 패턴을 이용해 본인 객체를 생성과 동시에 내부에 특정 Url을 등록하고 이를 반환하도록 했다.