스프링 빈은 객체생성 → 의존관계 주입 의 라이프 사이클을 가진다.

사용하고 싶은 db나 정보들을 스프링 빈로직을 활용해서 결과물을 만들어내고 싶다면,

스프링 빈의 의존관계 주입이 모두 완료되고 난 다음 초기화 작업을 실시해야 할 것이다.

그렇다면 개발자는 그게 끝난 시점을 우째 알까?

→ “스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 매서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공” 한다.

-스프링 빈의 라이프사이클-

“스프링 컨테이너 생성” → “스프링 빈 생성” → “의존관계 주입” → “초기화 콜백” → “사용” → “소멸전 콜백” → “스프링 종료”

아니 그럴거면~ 생성하면서 초기화하면 안되나요~?

→ 생성과 초기화의 역할을 분리해야죠.

초기화는 이렇게 생성된 값들을 활용해서 외부 리소스를(DB커넥션 등등) 연결하는 등 무거운 동작이랍니다.

생성과 동시에 이렇게 무거운 동작까지 하면 매우 난감하겠죠~. 생성 해놓고 요청이 들어오면 초기화하고 연결하고~ 이렇게 분기를 나누는 관점을 모든 로직에서 추천한다!

자 이제 시점 알려주는 방법 3가지

  1. 인터페이스 (InitalizingBean, DisposableBean)
    1. 각각 implements하면 그 안에 afterPropertiesSet(초기화 콜백)
    2. destroy(소멸전 콜백) 이 들어있으니 Override해서 쓰는거임.
    3. 매우 직관적이지만 스프링 전용 인터페이스에 의존하기 때문에 이름 변경 불가능, 외부 라이브러리에 적용할 수 없다는 단점 존재.
    4. 매우 초창기에 나온 방법이라 요샌 안씀. 2003년에 나왔다네(동갑 안녕)