빈 생명주기 콜백
2023. 9. 26. 08:00ㆍLECTURES/스프링 핵심 원리 기본편
빈 생명주기 콜백 시작
- 데이터베이스 커넥션 풀이나, 네티워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요
- 스프링 빈은 객체를 생성하고 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료됨
- 따라서 초기화 작업은 의존관계 주입이 모두 완료된 후에 호출해야 함
- 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공
- 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줌
스프링 빈의 이벤트 라이프사이클
- 스프링 컨테이너 생성
- 스프링 빈 생성
- 의존관계 주입
- 초기화 콜백
- 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출
- 사용
- 소멸 전 콜백
- 빈이 소멸되기 직전에 호출
- 스프링 종료
객체의 생성과 초기화를 분리하자
- 생성자는 필수 정보를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가짐
- 초기화는 이렇게 생성된 값들을 활용해서 외부 커넥션을 연결하는 등 무거운 동작을 수행
- 생성자 안에서 무거운 초기화 작업을 함께 하는 것보다는 객체를 생성하는 부분과 초기화하는 부분을 명확하게 나누는 것이 유지보수 관점에서 좋음
- 초기화 작업이 단순한 경우에는 생성자에서 한 번에 다 처리하는 게 나을 수 있음
스프링 빈 생명주기 콜백 방식
인터페이스 InitializingBean, DisposableBean
InitializingBean
:afterPropertiesSet()
메서드로 초기화를 지원DisposableBean
:destroy()
메소드로 소멸을 지원
초기화, 소멸 인터페이스 단점
- 스프링 전용 인터페이스에 의존
- 초기화, 소멸 메서드의 이름 변경 불가능
- 내가 코드를 고칠 수 없는 외부 라이브러리에 적용 불가능
- 지금은 거의 사용하지 않음
빈 등록 초기화, 소멸 메서드 지정
- 설정 정보에
@Bean(initMethod = "init
, destroyMethod = "close")처럼 초기화, 소멸 메서드를 지정 가능 - 메서드 이름을 자유롭게 줄 수 있음
- 스프링 빈이 스프링 코드에 의존하지 않음
- 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메서드를 적용 가능
종료 메서드 추론
- 라이브러리 대부분은 종료 메서드 이름으로
close
,shutdown
사용 @Bean
의destroyMethod
는 기본값이(inferred)
로 등록되어 있음- 이 추론 기능은
close
,shutdown
이라는 이름의 메서드를 자동으로 호출해 줌 - 직접 스프링 빈으로 등록하면 종료 메서드는 따로 적어주지 않아도 작 동작함
- 추론 기능을 사용하기 싫으면
destroyMethod= ""
처럼 빈 공백을 지정하면 됨
애노테이션 @PostConstruct, @PreDestroy
- 최신 스프링에서 가장 권장하는 방법
- 애노테이션 하나만 붙이면 돼서 매우 편리
- 스프링에 종속적인 기술이 아니라 JSR-250라는 자바 표준이므로 스프링이 아닌 다른 컨테이너에서도 동작함
- 컴포넌트 스캔과 잘 어울림
- 유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것
- 외부 라이브러리를 초기화, 종료해야 하면
@Bean
기능을 사용
정리
- @PostConstruct, @PreDestory 애노테이션을 사용하자
- 코드를 고칠 수 없는 이부 라이브러리를 초기화, 종료해야 하면
@Bean
의initMethod
,destroyMethod
를 사용하자
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢
www.inflearn.com
'LECTURES > 스프링 핵심 원리 기본편' 카테고리의 다른 글
빈 스코프 (0) | 2023.09.26 |
---|---|
의존관계 자동 주입 (0) | 2023.09.26 |
컴포넌트 스캔 (0) | 2023.09.26 |
싱글톤 컨테이너 (0) | 2023.09.26 |
스프링 컨테이너와 스프링 빈 (0) | 2023.09.26 |