Bean LifeCycle

Date:     Updated:

카테고리:

태그:

bean LifeCycle란?

스프링의 컨테이너는 Bean 객체들을 관리한다. 객체들을 관리한다는 것은 싱글턴으로 제공하거나 필요한 곳에 주입하는 것뿐 아니라 객체의 생성과 소멸,
즉 생명주기(Life Cycle)을 관리한다는 것을 의미한다.
빈은 객체를 생성과정을 걸쳐 의존관계 주입이 다 끝난 후에 필요한 데이터를 사용할 수 있는게 된다.
따라서 당연하게 초기화 작업은 의존관계 주입이 모두 끝난 후에 호출해야 한다.
그렇다면 개발자들은 의존관계 주입이 완료된 시점을 어떻게 알 수 있을까?
스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다.
또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다.
따라서 안전하게 종료 작업을 진행할 수 있다.

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

  • 초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출
  • 소멸전 콜백: 빈이 소멸되기 직전에 호출

스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 지원한다.

  1. 인터페이스(InitializingBean, DisposableBean)
    • 스프링 전용 인터페이스에 의존, 초기화,소멸 메서드 이름변경불가, 코드를 고칠 수 없는 외부 라이브러리 에 적용 불가
    • 거의 사용하지않는다.
  2. 설정 정보에 초기화 메서드, 종료메서드 지정 @Bean(initMethod = “init”, destroyMethod = “close”)
    • 메서드 이름이 자유롭다.
    • 스프링 빈이 스프링 코드에 의존하지 않는다.
    • 코드가 아니라 설정 정보를 사용하기 떄문에 코드를 고칠수 없는 외부 라이브러리에도 초기화,종료 메서드를 적용할 수 있다.
    • @Bean의 destroyMethod는 기본값은 추론으로 등록되어있다 -> 추론기능은 close, shutdown 이라는 이름의 메서드를 자동으로 추론해서 호출한다.
  3. PostConstruct, @PreDestroy 애노테이션 지원
    • 최신 스프링에서 권장하는 방법
    • 애노테이션하나로 매우편리
    • 자바 표준이라 스프링 종속적인 기술이 아니다. 다른컨테이너에서도 동작한다.
    • 컴포넌트 스캔과 어울린다.
    • 유일한 단점은 외부라이브러리에 적용 불가 -> 대체 initMethod

  • Part1 : 인스턴스화 후 빈이 사용할 준비가 될 때까지 거치는 단계를 보여준다.
  • Part2 : Spring IoC 컨테이너가 종료되면 빈에 어떤 일이 발생하는지 보여준다.

Spring 카테고리 내 다른 글 보러가기

댓글남기기