Bean LifeCycle
카테고리: Spring
태그: BeanLifeCycle
bean LifeCycle란?
스프링의 컨테이너는 Bean 객체들을 관리한다. 객체들을 관리한다는 것은 싱글턴으로 제공하거나 필요한 곳에 주입하는 것뿐 아니라 객체의 생성과 소멸,
즉 생명주기(Life Cycle)을 관리한다는 것을 의미한다.
빈은 객체를 생성과정을 걸쳐 의존관계 주입이 다 끝난 후에 필요한 데이터를 사용할 수 있는게 된다.
따라서 당연하게 초기화 작업은 의존관계 주입이 모두 끝난 후에 호출해야 한다.
그렇다면 개발자들은 의존관계 주입이 완료된 시점을 어떻게 알 수 있을까?
스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다.
또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다.
따라서 안전하게 종료 작업을 진행할 수 있다.
스프링 빈의 이벤트 라이프사이클 스프링컨테이너생성 -> 스프링빈생성 -> 의존관계주입 -> 초기화콜백 -> 사용 -> 소멸전콜백 -> 스프링 종료
- 초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출
- 소멸전 콜백: 빈이 소멸되기 직전에 호출
스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 지원한다.
- 인터페이스(InitializingBean, DisposableBean)
- 스프링 전용 인터페이스에 의존, 초기화,소멸 메서드 이름변경불가, 코드를 고칠 수 없는 외부 라이브러리 에 적용 불가
- 거의 사용하지않는다.
- 설정 정보에 초기화 메서드, 종료메서드 지정 @Bean(initMethod = “init”, destroyMethod = “close”)
- 메서드 이름이 자유롭다.
- 스프링 빈이 스프링 코드에 의존하지 않는다.
- 코드가 아니라 설정 정보를 사용하기 떄문에 코드를 고칠수 없는 외부 라이브러리에도 초기화,종료 메서드를 적용할 수 있다.
- @Bean의 destroyMethod는 기본값은 추론으로 등록되어있다 -> 추론기능은 close, shutdown 이라는 이름의 메서드를 자동으로 추론해서 호출한다.
- PostConstruct, @PreDestroy 애노테이션 지원
- 최신 스프링에서 권장하는 방법
- 애노테이션하나로 매우편리
- 자바 표준이라 스프링 종속적인 기술이 아니다. 다른컨테이너에서도 동작한다.
- 컴포넌트 스캔과 어울린다.
- 유일한 단점은 외부라이브러리에 적용 불가 -> 대체 initMethod
- Part1 : 인스턴스화 후 빈이 사용할 준비가 될 때까지 거치는 단계를 보여준다.
- Part2 : Spring IoC 컨테이너가 종료되면 빈에 어떤 일이 발생하는지 보여준다.
댓글남기기