Spring 라이프 사이클

hoyong.eom·2023년 7월 1일
0

스프링

목록 보기
4/59
post-thumbnail

Spring


스프링 빈의 이벤트 라이프 사이클

스프링 빈은 아래와 절차로 라이플 사이클을 갖는다고 한다.

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

생각해보면 C++에서 프로젝트를 할때 객체의 생성자에서 온갖 일을 많이 처리했었던 기억이 있다. 그렇게 할 수 있었던 이유는 C++에서의 의존객체는 개발자가 알아서 넣어주기 때문이다.
하지만, 스프링 컨테이너에서 관리되고 있는 스프링 빈 객체는 생성자에서 여러 일을 하도록 하면 안된다고 한다.

그 이유는 여러 가지가 있겠지만, 의존성 주입이 되지 않은 상태에서 어떤 작업을 수행할 수 있기 때문이라고 한다. 객체는 생성되었지만 의존성 주입이 진행되지 않았다?
(내 생각엔 이부분에서 잦은 실수가 발생할것같다. 아마 개발하다보면 여기서 시간을 버리는 일도 있지않을까 생각됐다.)

그래서!!!

스프링에서는 위 라이플 사이클 처럼 초기화 콜백과 소멸전 콜백 함수를 제공해서 생성자에서 일을 처리하지 말고 콜백 함수에서 작업을 수행하도록 가이드한다고 한다.


콜백 함수

초기화 및 소멸을 위한 콜백 함수를 제공하기 위한 방법을 여러 가지가 있다고 한다.

  1. InitializingBean, DisposableBean 인터페이스 구현
  2. @Bean(initMethod = "init", destroyMethod = "close") 처럼 메서드 등록
  3. @PostContruct, @PreDestory 애노테이션 사용

결론은 3번째 방법을 사용한다. 가장 간편하니까?
사용 방법은 초기화 및 소멸 콜백 함수에 위 애노테이션을 붙여주면 된다. 매우 간단하긴 하다.

결론

스프링 컨테이너에서 관리되고 있는 스프링 빈 객체는 생성자에서 생성 이외의 별도의 초기화 함수를 호출하지 말자! 초기화 및 소멸을 위한 함수는 별도의 콜백 메서드를 구현해서 사용하자.


참고

해당 포스팅은 아래의 강의를 공부 후 개인적으로 정리한 내용입니다.
김영한님의 스프링 기본편

0개의 댓글