녕의 학습 기록

[Spring 기본] 빈 생명주기 콜백 본문

Dev/Spring

[Spring 기본] 빈 생명주기 콜백

kjyyjk 2022. 11. 22. 22:45

 학습 내용 

빈 생명주기 콜백


* 빈 생명주기 콜백

 

애플리케이션 시작 시점에 연결 미리 해두고 종료 이전에 연결을 종료(안전하게)

( like 애플리케이션 과 DB를 미리 연결 해두는 )

 

를 위해서는 객체의 초기화, 종료작업 필요!!

 

스프링 빈은 다음과 같이 두 단계로 이루어진다는 것을 앞에서 학습했다.

 

1. 빈 객체 생성

2. 의존관계 주입

 

이 과정이 모두 끝난 후에야 데이터를 사용할 수 있는 준비 완료됨.

 

그렇다면 의존관계가 끝난 후에 초기화 작업을 해야하는데.

 

우리가 스프링 빈의 의존관계 주입이 끝났는 지 어떻게 알 수가 있나.. ?

 

초기화 콜백 ==> 의존관계 주입까지 끝났으니 이제 너 하고싶은 대로 마음대로 해

 

생성자 인젝션은 스프링 빈 생성과 동시에 의존관계 주입을 한다는 것을 앞에서 학습했었다.

(setter / 필드 주입은 빈 생성 이후에 의존관계 주입)

 

그렇다면 setter가 아닌 생성자 인젝션을 이용하면 끝날 문제인데 왜,,,,?

# 객체의 생성과 초기화를 분리하라 !
초기화는 생성된 값들을 활용해서 외부 커넥션을 연결 등 무거운 역할 수행.
이에 반해 생성자는 파라미터 받고 메모리 할당 후 객체 생성하는 책임을 가진다
생성자에서 두개 다 하는 것 보다 분리하는 것이 유지보수 관점에서 좋다고 한다.
" Solid의 단일 체계 원칙 "

 

 

빈 생명주기 콜백을 지원하는 3가지 방법

1. 인터페이스

2. 설정 정보에 초기화 / 종료 메서드 지정

3. 애노테이션 지원

 

* 인터페이스( InitializingBean, DisposableBean )

 

인터페이스 구현 및 메서드 오버라이딩

의존관계 주입 끝나면 InitializingBean 의 afterPropertiesSet() 메서드가 초기화 지원

 

Disposable 의 destroy() 메서드가 소멸 지원

 

전까지는 다 null값이었는데 의존관계 주입 후 초기화 작업을 진행했기에 제데로 url 들어온 것 확인.

 이 인터페이스는 스프링 전용 인터페이스이므로 한계가 존재. 지금은 거의 사용하지 않는다.

 

* 빈 등록 초기화 / 종료 메서드 지정

 

설정정보에 초기화 / 소멸 메서드를 지정해줬다

 

@Bean(initMethod = "init" destroyMethod = "close")

destroyMethod의 디폴트 값은 (inferred). 추론 이다.

 

지정을 하지 않아도 자주 사용하는 메서드 이름인 "close", "shutdown" 메서드를 찾아 자동으로 호출!!

 

 

빈 등록 초기화 / 종료 메서드 지정의 장점으로는 메서드 이름을 자유롭게 줄 수 있고,

스프링에 의존하지 않는 다는 점.

+ 외부 라이브러리에 적용 가능

 

* 애노테이션

 

앞의 두 방법보다는 이 방법을 사용하기를 스프링에서도 권장하고 있다고 한다.

 

@PostConstruct (생성자 후에) , @PreDestroy (소멸 이전에)

 

이름부터가 느낌 빡온다.

 

결과는 역시 똑같이 나온다

 

매우 편리하다!! 스프링 종속 기술도 아니라 스프링에 의존 x

 

단, 외부 라이브러리에 적용 불가 -> ( 이때는 @Bean initMethod, destroyMethod 이용)

 


 다음 학습 내용 

 

빈 스코프란??

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com