1. Spring bean life cycle
- 객체 생성 → 의존관계 주입
1.1 Spring bean event life cycle
- 스프링 빈은 객체를 생성하고, 의존관계 주입이 모두 끝난 다음에야 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 완료되고 난 다음에 호출돼야 한다.
- 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에도 소멸 전 콜백을 준다.
- 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료
2. 인터페이스(InitializingBean, DisposableBean)를 이용한 방법
- InitializingBean, DisposableBean 인터페이스를 상속 받아 콜백 메서드를 오버라이딩한다.
- InitializingBean은 afterPropertiesSet() 메서드로 초기화를 지원한다.
- DisposableBean은 destroy() 메서드로 소멸을 지원한다.
- 초기화, 소멸 메서드의 이름을 변경할 수 없다.
- 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다.
- 스프링 전용 인터페이스이다.
public class Test implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {}
@Override
public void destroy() throws Exception {};
}
3. 설정 정보에 초기화, 소멸 메서드를 지정하는 방법
- @Bean(initMethod = "init", destroyMethod = "close")와 같은 방법으로 설정 정보에 초기화, 소멸 메서드를 지정할 수 있다.
- 메서드 이름을 자유롭게 줄 수 있다.
- 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다.
- 스프링 빈이 스프링 코드에 의존하지 않는다.
- 종료 메서드 추론: destroyMethod는 기본값이 (inferred)로 등록되어 있기 때문에, close, shutdown이라는 이름의 메서드를 자동으로 호출해준다. 따라서 직접 스프링 빈으로 등록하면 종료 메서드를 따로 적어주지 않아도 잘 동작한다. 추론 기능을 사용하고 싶지 않다면 destroyMethod = ""로 설정하면 된다.
//설정 정보
@Configuration
static class TestConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public Test test() {
Test test = new Test();
return test;
}
}
//서비스 코드
public class Test {
public void init() {}
public void close() {};
}
4. @PostConstruct, @PreDestroy 애노테이션을 이용한 방법
- 애노테이션 하나만 붙이면 되므로 편리하다.
- 스프링 종속 기술이 아닌 자바 표준이다.
- 외부 라이브러리에는 적용하지 못하기 때문에, 이 때에는 설정 정보에 초기화, 소멸 메서드를 지정하는 방법을 사용해야 한다.
- 최신 스프링에서 가장 권장하는 방법이다.
public class Test {
@PostConstruct
public void init() {}
@PreDestroy
public void close() {};
}
참고
- 『스프링 핵심 원리 - 기본편』
'Spring' 카테고리의 다른 글
DispatcherServlet (0) | 2021.11.08 |
---|---|
Bean Scope (0) | 2021.10.16 |
의존관계 주입 시 bean이 2개 이상일 때 해결 방법 (0) | 2021.10.11 |
Lombok library가 제공하는 애노테이션 (0) | 2021.10.11 |
다양한 의존관계 주입 방법 (0) | 2021.10.11 |