일단 이게 뭐냐면, 스프링 빈의 라이플사이클은
스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료
이다.
객체에서 생성자와 초기화를 분리하는게 좋은데, 생성은 메모리에 공간 확보해서 생성하는 책임이 있고, 초기화는 외부 커넥션 등 무거운 책임을 가진다. 그래서 객체 생성 부분과 초기화 부분을 나누는게 더 좋다고 한다. 그래서 밑에 예제 보면 생성하고 set은 나중에 함.
결론은 그냥 @PostConstruct, @PreDestroy 써라. 유일한 단점은 외부 라이브러리에는 적용하지 못한다고 해서 이럴땐 @Bean에서 초기화 함수, 소멸 함수 정하는거 쓰자.
public class NetworkClient implements InitializingBean, DisposableBean {
private String url;
public NetworkClient() {
System.out.println("생성자 호출, url = " + url);
// connect();
// call("초기화 연결 메시지");
}
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();
}
}
이 이름 정해서 하는 것의 대단함은 destroyMethod를 정하지 않으면 많은 라이브러리에서 닫는 함수를 'close', 'destroy', 'disconnect'같은걸 쓰니 이것들을 추론해서 시도해 본다는 것.
'CS > 김영한 스프링 강의' 카테고리의 다른 글
HTTP 웹 기본 지식 - ~ 섹션5. HTTP 메서드 활용 (0) | 2023.07.09 |
---|---|
스프링 기본 - 섹션9. 빈 스코프 (0) | 2023.07.06 |
스프링 기본 - 섹션7. 의존관계 자동 주입 (0) | 2023.07.05 |
스프링 기본 - 섹션6. 컴포넌트 스캔 (0) | 2023.07.03 |
스프링 기본 - 섹션5. 싱글톤 컨테이너 (0) | 2023.07.03 |