인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] 섹션8. 빈 생명주기 콜백에 대한 요점 정리를 하였다.
목차
1.스프링 빈 이벤트 라이프 사이클
2.빈 생명주기 콜백 3가지 방법
1.스프링 빈 이벤트 라이프 사이클
스프링 빈의 이벤트 라이프 사이클은 다음과 같다.
스프링 컨테이너 생성 -> 스프링 빈 생성 ->
의존관계 주입 ->
초기화 콜백 -> 사용 -> 소멸전 콜백 ->
스프링 종료
데이터베이스 커넥션 풀이나, 네트워크 소켓의 경우, 애플리케이션 시작 시점에 필요한 연결을 하고 애플리케이션 종료 시점에 종료하는 작업이 필요하다.
이를 위해 객체의 초기화와 종료 작업인 빈 생명주기 콜백 3가지에 대해 알아보려한다.
2.빈 생명주기 콜백 3가지 방법
2-1. 인터페이스 InitializingBean, DisposableBean
인터페이스 InitializingBean, DisposableBean을 구현한다.
단점: 스프링 전용 인터페이스에 의존한다.
초기화, 소멸 메서드의 이름 변경이 불가하다.
코드를 고칠 수 없는 외부 라이브러리에 적용 불가하다.
더 나은 방법이 있기에 사용하지 않는다.
2-2. 빈 등록 초기화, 소멸 메서드 지정
@Bean(initMethod = "init", destroyMethod = "close")처럼 초기화, 소멸 메서드 지정이 가능하다.
@Configuration
static class LifeCycleConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("http://hello-spring.dev");
return networkClient;
}
}
메서드 이름을 자유롭게 지정 가능하다
스프링 빈이 스프링 코드에 의존하지 않는다.
설정 정보를 사용하기에 코드를 고칠 수 없는 외부 라이브러링도 초기화, 종료 메서드 적용 가능하다.
2-3. 어노테이션 @PostConstruct, @PreDestroy
public class NetworkClient {
...
@PostConstruct
public void init(){
System.out.println("NetworkClient.init");
connect();
call("초기화 연결 메시지");
}
@PreDestroy
public void close(){
System.out.println("NetworkClient.close");
disconnect();
}
}
스프링에서 가장 권장하는 방법이다.
어노테이션만 붙이면 되기에 편리하다.
컴포넌트 스캔과 잘 어울린다.
외부 라이브러리에 적용이 안되는 단점이 있다. 외부 라이브러리를 초기화 ,종료해야할 경우, @Bean을 적용하는 방법을 사용하자.
'Spring' 카테고리의 다른 글
[Spring] 프로젝트 모듈로 구현시 templates 사용법 - Gradle (0) | 2024.11.06 |
---|---|
RequestDTO에 사용하는 @NoArgsConstructor(access = AccessLevel.PROTECTED) (0) | 2024.09.30 |
[Spring] 스프링 핵심 원리 - 기본편 > 섹션 7. 의존관계 자동 주입 (0) | 2024.04.11 |
[Spring] 스프링 핵심 원리 - 기본편 > 섹션 6. 컴포넌트 스캔 (0) | 2024.04.11 |
[Spring] 스프링 핵심 원리 - 기본편 > 섹션 5. 싱글톤 컨테이너 (0) | 2024.04.10 |
댓글