Bean LifeCycle
Bean LifeCycle
Bean LifeCycle
- 스프링 빈은 다음과 같은 생명 주기를 가짐
- Spring container 생성
- Spring bean 생성
- 의존관계 주입
- 초기화 콜백
- Bean 사용
- 소멸전 콜백
- Spring 종료
- 초기화 콜백을 이용해 객체의 초기화를 수행 가능, 객체의 생성과 초기화가 분리됨
- 소멸전 콜백으로 객체가 소멸되기 전에 수행해야 하는 작업을 수행 가능
- 다음과 같은 세 가지 방법을 통해 초기화 콜백, 소멸전 콜백을 이용 가능
InitializingBean
, DisposableBean
인터페이스- 설정 정보를 활용
@PostConstruct
, @PreDestroy
어노테이션
InitializingBean, DisposableBean 인터페이스
- Spring bean이
InitializingBean
인터페이스를 구현 시afterPropertiesSet()
메소드를 오버라이딩해서 초기화 콜백 이용 가능
DisposableBean
인터페이스를 구현 시destroy()
메소드를 오버라이딩해서 소멸전 콜백 이용 가능
- 다음과 같은 단점들 때문에 잘 사용되지 않음
- 메소드 이름이 고정됨
- Spring 전용 인터페이스므로 코드가 spring에 의존
- 외부 라이브러리에 사용 불가
설정 정보를 활용
- 설정 정보에서
@Bean(initMethod = "init")
을 사용 시- 클래스 내의
init()
함수가 초기화 콜백으로 호출 됨
@Bean(destroyMethod = "close")
을 사용 시- 클래스 내의
close()
함수가 소멸전 콜백으로 호출 됨
- 메소드 이름이 고정되지 않고, spring에 의존하지 않으며, 외부 라이브러리에 사용 가능
@PostConstruct, @PreDestroy 어노테이션
- 클래스 내의 함수에
@PostConstruct
어노테이션을 붙이면, 해당 함수가 초기화 콜백으로 호출 됨 @PreDestroy
어노테이션을 붙이면, 해당 함수가 소멸전 콜백으로 호출 됨- 최신 스프링에서 가장 권장되고, 가장 쉽고 간편한 방법
- 다만 외부 라이브러리의 경우 수정이 불가능. 이 때는 설정 정보를 활용해야 함
References
- 스프링 핵심 원리 기본편 - 김영한 (https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard)