더북(TheBook)

4.2 빈 라이프사이클 관리

스프링을 포함한 모든 IoC 컨테이너가 제공하는 주요 기능 중 하나는 생성이나 소멸 같은 빈 라이프사이클(Life Cycle)의 특정 시점에 통지를 받을 수 있게 빈을 생성하는 기능입니다. 빈이 라이프사이클 이벤트 통지를 받을 수 있게 설정하면 해당 빈은 이벤트 발생 시점에 관련 처리를 할 수 있습니다. 일반적으로 두 가지 라이프사이클 이벤트가 빈과 관련이 있는데, 바로 “초기화 이후(post-initialization)”와 “소멸 이전(pre-destruction)” 이벤트입니다.

스프링에서 초기화 이후 이벤트는 스프링이 개발자가 구성한 대로 빈에 모든 프로퍼티 값을 설정하고 의존성 점검을 마치자마자 발생합니다. 반면 소멸 이전 이벤트는 스프링이 빈 인스턴스를 소멸시키기 바로 전에 발생합니다. 하지만 요청을 받을 때마다 스프링 컨테이너가 매번 빈을 생성하는 프로토타입(prototype) 빈에는 스프링이 소멸 전 이벤트를 통지하지 않습니다. 스프링은 빈의 스코프(Scope)와 상관없이 초기화 라이프사이클 콜백 메서드를 호출하도록 설계됐지만, 프로토타입 스코프 빈의 소멸 라이프사이클 메서드는 호출되지 않게 설계됐습니다. 스프링은 빈이 이런 라이프사이클 이벤트를 받을 수 있는 세 가지 메커니즘을 제공합니다. 이 세 가지 메커니즘은 인터페이스 기반, 메서드 기반, 애너테이션 기반 메커니즘입니다.

인터페이스 기반 메커니즘을 사용할 때는 수신을 원하는 통지 유형에 해당하는 인터페이스를 빈에 구현해두면 스프링이 인터페이스에 정의된 콜백을 사용해 해당 빈에 통지를 합니다. 메서드 기반 메커니즘을 사용할 때는 빈이 초기화될 때와 소멸될 때 호출할 메서드 이름을 ApplicationContext 구성에 지정합니다. 한편 애너테이션 기반 메커니즘을 사용할 때는 스프링이 빈을 초기화한 후나 소멸 전에 호출해야 할 메서드를 JSR-250에 정의된 애너테이션으로 구성합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.