녕의 학습 기록
[Spring 기본] 빈 생명주기 콜백 본문
♪ 학습 내용
빈 생명주기 콜백
* 빈 생명주기 콜백
애플리케이션 시작 시점에 연결 미리 해두고 종료 이전에 연결을 종료(안전하게)
( like 애플리케이션 과 DB를 미리 연결 해두는 )
를 위해서는 객체의 초기화, 종료작업 필요!!
스프링 빈은 다음과 같이 두 단계로 이루어진다는 것을 앞에서 학습했다.
1. 빈 객체 생성
2. 의존관계 주입
이 과정이 모두 끝난 후에야 데이터를 사용할 수 있는 준비 완료됨.
그렇다면 의존관계가 끝난 후에 초기화 작업을 해야하는데.
우리가 스프링 빈의 의존관계 주입이 끝났는 지 어떻게 알 수가 있나.. ?
초기화 콜백 ==> 의존관계 주입까지 끝났으니 이제 너 하고싶은 대로 마음대로 해
생성자 인젝션은 스프링 빈 생성과 동시에 의존관계 주입을 한다는 것을 앞에서 학습했었다.
(setter / 필드 주입은 빈 생성 이후에 의존관계 주입)
그렇다면 setter가 아닌 생성자 인젝션을 이용하면 끝날 문제인데 왜,,,,?
# 객체의 생성과 초기화를 분리하라 ! 초기화는 생성된 값들을 활용해서 외부 커넥션을 연결 등 무거운 역할 수행. 이에 반해 생성자는 파라미터 받고 메모리 할당 후 객체 생성하는 책임을 가진다 생성자에서 두개 다 하는 것 보다 분리하는 것이 유지보수 관점에서 좋다고 한다. " Solid의 단일 체계 원칙 " |
빈 생명주기 콜백을 지원하는 3가지 방법
1. 인터페이스
2. 설정 정보에 초기화 / 종료 메서드 지정
3. 애노테이션 지원
* 인터페이스( InitializingBean, DisposableBean )
의존관계 주입 끝나면 InitializingBean 의 afterPropertiesSet() 메서드가 초기화 지원
Disposable 의 destroy() 메서드가 소멸 지원
이 인터페이스는 스프링 전용 인터페이스이므로 한계가 존재. 지금은 거의 사용하지 않는다.
* 빈 등록 초기화 / 종료 메서드 지정
설정정보에 초기화 / 소멸 메서드를 지정해줬다
@Bean(initMethod = "init" destroyMethod = "close")
destroyMethod의 디폴트 값은 (inferred). 추론 이다.
지정을 하지 않아도 자주 사용하는 메서드 이름인 "close", "shutdown" 메서드를 찾아 자동으로 호출!!
빈 등록 초기화 / 종료 메서드 지정의 장점으로는 메서드 이름을 자유롭게 줄 수 있고,
스프링에 의존하지 않는 다는 점.
+ 외부 라이브러리에 적용 가능
* 애노테이션
앞의 두 방법보다는 이 방법을 사용하기를 스프링에서도 권장하고 있다고 한다.
@PostConstruct (생성자 후에) , @PreDestroy (소멸 이전에)
이름부터가 느낌 빡온다.
결과는 역시 똑같이 나온다
매우 편리하다!! 스프링 종속 기술도 아니라 스프링에 의존 x
단, 외부 라이브러리에 적용 불가 -> ( 이때는 @Bean initMethod, destroyMethod 이용)
♪ 다음 학습 내용
빈 스코프란??
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
'Dev > Spring' 카테고리의 다른 글
[Spring 기본] 빈 스코프 (2) (0) | 2022.11.28 |
---|---|
[Spring 기본] 빈 스코프 (1) (0) | 2022.11.25 |
[Spring 기본] 의존관계 자동 주입 (4) (0) | 2022.11.20 |
[Spring 기본] 의존관계 자동 주입 (3) (0) | 2022.11.19 |
[Spring 기본] 의존관계 자동 주입 (2) (0) | 2022.11.18 |