2021 Spring Study

Spring 9. Bean 라이프사이클 미션

Yerim Kim 2021. 1. 8. 17:27

스프링 컨테이너 초기화 시 : Bean 객체들을 생성 및 의존주입 및 초기화한다.

스프링 컨테이너 종료 시 : Bean 객체들 소멸

// 컨테이너 초기화
AbstractApplicationContext appContext =
    new AnnotationConfigApplicationContext(AppConfiguration.class);
    
UserService userService =
    appContext.getBean("userService", UserService.class);

// 컨테이너 종료
appContext.close();

미션 1. InitializingBean

스프링 Bean 객체는 언제 처음으로 생성될까? 스프링 컨테이너 초기화 시 생성될까? 아니면 컨테이너에 해당 Bean을 처음으로 요청할 때 생성될까? 이를 확인해보자.

 

아래 깃허브 리포지토리의 lifecycle 브랜치의 코드를 다운받아서 시작한다.

github.com/yelimkim98/spring-practice

 

다음의 경우 각각에 대한 시각을 출력해보자.

1. 스프링 컨테이너 객체 생성 및 초기화 수행 직후

    (주어진 코드의 main 메서드에 구현되어있음)

2. 일정 시간이 지나고, UserService Bean 객체를 처음으로 컨테이너에 요청하기 직전

   (주어진 코드의 main 메서드에 구현되어있음)

3. UserService Bean 객체 생성시

4. UserDao Bean 객체 생성시

 

만약 Bean 객체가 생성되는 시점이 컨테이너 초기화 시라면, 1번 이전에 3번, 4번이 출력될 것이다.

만약 Bean 객체가 생성되는 시점이 컨테이너에 해당 Bean을 처음으로 요청할 시라면, 2번 이후에 3번, 4번이 출력될 것이다.

 

InitializingBean 인터페이스를 사용하여 구현해보자.

 


미션 2. DisposableBean

DisposableBean 인터페이스를 사용하여, 두 Bean 객체 UserService 와 UserDao가 소멸중인 시점의 시각을 출력해보자.

 


미션 3.

@Bean 태그의 initMethod 속성과 destoryMethod 속성을 사용하여,

미션 2의 UserService 와 UserDao 클래스의 인터페이스 상속을 제거해보자.