본문 바로가기

Spring

Spring에서 빈의 생명주기


Spring 프레임 워크 책에 있는 내용을 정리 한 것입니다.
(출처 : Spring 프레임워크 워크북 , 박재성,  한빛미디어)

1. 일단 POJO빈을 인스턴스화 하지 않은 상태로 빈 설정 파일 정보를 초기화 한다. XML,DTD 유효성도 체크한다.

2. 빈 인스턴스를 생성하면서 의존관계에 있는 빈이 존재 하는지의 여부를 체크하고, 존재 하지 않으면 빈 초기화에 실패한다.
(WAS 구동시 Exception이 발생하게 된다. ~xml 에 설정되어 있는 ~class가 없어요~~~)

3. 의존관계에 있는 빈의 체크가 완료되면 각 Injection에 맞게 (Setter or Contructor) 값을 추가하거나, 레퍼런스를 전달한다.

4. 생성한 빈이 BeanNameAware 인스턴스 이면 (implements 하고 있으면) setBeanName() 메서드를 호출한다.

5. 생성한 빈이 BeanFactoryAware 인스턴스 이면 (implements 하고 있으면) setBeanFactory() 메서드를 호출한다.

6. 생성한 빈이 ApplicationContextAware 인스턴스이면 setApplicationContext() 메서들르 호출한다.
이 과정은 ApplicationContext를 이용하여 초기화 할 때만 실행된다.
(위 인터페이스들을 implements 하고 있으면, 구현한 POJO 클래스는 각각의 컨테이너 내부정보에 접근 할 수 있다. 예를 들어서 ApplicationContextAware 인터페이스를 구현한 POJO 클래스는 ApplicationContext 인스턴스에 접근 가능하다.)

구현 예:
private ApplicationContext context;

public void setApplicationContext(ApplicationContext context) throws BeanException {
 this. context = context;
}

7. 생성한 빈이 InitializingBean 인스턴스이면 (implements InitializingBean) afterProperties 메서드를 호출한다.

8. 설정 파일에 init-method가 설정되어 있으면, init-method에 해당하는 메서드를 호출한다.
(7,8 번은 커스텀 초기화 메서드 호출에 대한 얘기로 7번은 스프링에서 제공하는 인터페이스를 구현하는 것이고
아래는 설정 파일을 이용하는 것이다.)


소멸 역시 7,8번과 동일하게 커스텀 설정을 할 수 있다.
DisposableBean 인터페이스를 구현하던가
설정파일에 destory-method를 설정 하는 것이다.

만약, 생성된 빈이 Singleton이 아니라면 위 2번부터 매번 초기화의 과정을 거치게 될 것이다.