개발놀이터

스프링 빈 생명주기 콜백 본문

Spring/Spring

스프링 빈 생명주기 콜백

마늘냄새폴폴 2021. 8. 16. 01:22

*빈 생명주기 콜백

1. 인터페이스 사용
2. 설정 정보에 초기화 메서드, 종료 메서드 지정
3. @PostConstruct, @PreDestroy 어노테이션 지원

1. 인터페이스 사용
implements InitializingBean, DisposableBean을 선언해준다.
그 후에 afterPropertiesSet(), distroy()메서드를 작성하면 된다. afterPropertiesSet() 은 생성자 호출하고 초기화가 다 끝나면 그때 호출이 된다. distroy()는 스프링이 내려갈때 맨 마지막에 호출해준다.

초기화, 소멸 인터페이스 단점
1. 이 인터페이스는 스프링 전용 인터페이스이다. 해당 코드가 스프링 전용 인터페이스에 의존한다.
2. 초기화, 소멸 메서드의 이름을 변경할 수 없다.
3. 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다.

인터페이스를 사용하는 초기화, 종료 방법은 스프링 초창기에 나온 방법들이고, 지금은 더 나은 방법들이 있어서 거의 사용하지 않는다.


2. 빈 등록 초기화, 소멸 메서드
빈을 등록할 때 @Bean(initMethod = "초기화메서드이름", destroyMethod = "소멸메서드이름") 이렇게 설정해주면 된다.

빈 등록 초기화, 소멸 메서드 장점
1. 메서드 이름을 자유롭게 줄 수 있다.
2. 스프링 빈이 스프링 코드에 의존하지 않는다.
3. 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다.

종료메서드 특징
@Bean의 destroyMethod 속성에는 아주 특별한 기능이 있다.
1. 라이브러리는 대부분 close, shutdown이라는 이름의 종료 메서드를 사용한다.
2. @Bean의 destroyMethod는 기본값이 (inferred)으로 등록되어 있다. inferred = 추론
3. 이 추론 기능은 close, shutdown 이라는 이름의 메서드를 자동으로 호출해준다. 이름 그대로 종료 메서드를 추론해서 호출해준다.
4. 따라서 직접 스프링 빈으로 등록하면 종료 메서드는 따로 적어주지 않아도 잘 동작한다.
5. 추론 기능을 사용하기 싫으면 destroyMethod="" 처럼 빈 공백을 지정하면 된다.


3. 어노테이션 @PostConstruct, @PreDestroy 사용
초기화 메서드에 @PostConstruct, 종료 메서드에 @PreDestroy 어노테이션을 붙여주기만 하면 된다. (간단하다)

@PostConstruct, @PreDestroy 어노테이션 특징
1. 최신 스프링에서 가장 권장하는 방법이다.
2. 어노테이션 하나만 붙이면 되므로 매우 편리하다.
3. 패키지를 잘 보면 javax.annotation.PostConstruct이다. 이는 스프링에 종속적인 기술이 아니라 JSR-250이라는 자바 표준이고 따라서 스프링이 아닌 다른 컨테이너에서도 동작한다.
4. 컴포넌트 스캔과 잘 어울린다.
5. 유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것이다. 외부 라이브러리를 초기화, 종료 해야하면 @Bean의 기능을 사용해야한다.

'Spring > Spring' 카테고리의 다른 글

스프링 MVC 구조  (0) 2021.08.19
스프링 빈 스코프  (0) 2021.08.16
스프링 @Autowired, @Component, @Qualifier, @Primary  (0) 2021.08.15
스프링빈 조회  (0) 2021.08.13
DI와 스프링빈  (0) 2021.08.13