스프링 빈은 아래와 절차로 라이플 사이클을 갖는다고 한다.
스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료
생각해보면 C++에서 프로젝트를 할때 객체의 생성자에서 온갖 일을 많이 처리했었던 기억이 있다. 그렇게 할 수 있었던 이유는 C++에서의 의존객체는 개발자가 알아서 넣어주기 때문이다.
하지만, 스프링 컨테이너에서 관리되고 있는 스프링 빈 객체는 생성자에서 여러 일을 하도록 하면 안된다고 한다.
그 이유는 여러 가지가 있겠지만, 의존성 주입이 되지 않은 상태에서 어떤 작업을 수행할 수 있기 때문이라고 한다. 객체는 생성되었지만 의존성 주입이 진행되지 않았다?
(내 생각엔 이부분에서 잦은 실수가 발생할것같다. 아마 개발하다보면 여기서 시간을 버리는 일도 있지않을까 생각됐다.)
그래서!!!
스프링에서는 위 라이플 사이클 처럼 초기화 콜백과 소멸전 콜백 함수를 제공해서 생성자에서 일을 처리하지 말고 콜백 함수에서 작업을 수행하도록 가이드한다고 한다.
초기화 및 소멸을 위한 콜백 함수를 제공하기 위한 방법을 여러 가지가 있다고 한다.
결론은 3번째 방법을 사용한다. 가장 간편하니까?
사용 방법은 초기화 및 소멸 콜백 함수에 위 애노테이션을 붙여주면 된다. 매우 간단하긴 하다.
스프링 컨테이너에서 관리되고 있는 스프링 빈 객체는 생성자에서 생성 이외의 별도의 초기화 함수를 호출하지 말자! 초기화 및 소멸을 위한 함수는 별도의 콜백 메서드를 구현해서 사용하자.
해당 포스팅은 아래의 강의를 공부 후 개인적으로 정리한 내용입니다.
김영한님의 스프링 기본편