[Spring] 빈 라이프사이클, 스코프

Fortice·2021년 1월 9일
1

Spring

목록 보기
4/13
post-thumbnail

라이프사이클

Spring Container의 초기화와 종료

// 1. 컨테이너 초기화
ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
// 2. 컨테이너 사용
UserDao dao = context.getBean("userDao", UserDao.class);
// 3. 컨테이너 종료
context.close();        

Bean 라이프사이클

컨테이너가 관리하는 Bean의 라이프사이클은 객체생성 - 의존설정 - 초기화 - 소멸 순서이다.
스프링 컨테이너가 초기화 할 때, 빈 객체를 설정 정보에 따라 생성하고, 의존 관계를 설정한다. 의존 설정이 완료되면, 빈 객체가 지정한 메소드를 호출해 초기화한다. 컨테이너가 종료될 시 빈 객체가 지정한 메소드를 호출해 빈 객체의 소멸을 처리한다.

초기화, 소멸 방법

  1. 빈 객체는 스프링의 InitializingBean, DisposableBean 인터페이스를 통해 초기화, 소멸 메소드를 구현할 수 있다.
public interface InitializingBean {
    void afterPropertiesSet() throws Exception;
}
public interface DisposableBean{
    void destroy() throws Exception;
}
  1. 자바 메소드 구현, @Bean 어노테이션에 명시를 통한 방법
 @Bean(initMethod="connectDB", destroyMethod="commit")

빈 객체의 생성과 관리 범위

DI를 공부할 때 배웠던 것처럼 기본적으로 생성되는 빈 객체는 싱글톤 의 범위를 갖는다. new로 생성하는 것과 달리 늘 같은 오브젝트를 얻는다. 하지만 Scope 설정을 통해 매번 새로운 객체를 받을 수 있다.

@Bean
@Scope("prototype")
public UserDao userDao() {
    return new UserDao();
}

prototype으로 설정하면 컨테이너가 소멸 메소드를 실행하지 않기 때문에 소멸 처리를 직접 해야한다.

Scope Name

스프링 공식 사이트를 보니 웹을 위한 scope 외에는 singleton과 prototype 뿐이다.

webapplication을 위한 scope

  • static final String SCOPE_REQUEST
    • Scope identifier for request scope: "request". Supported in addition to the standard scopes "singleton" and "prototype".
  • static final String SCOPE_SESSION
    • Scope identifier for session scope: "session". Supported in addition to the standard scopes "singleton" and "prototype".
profile
서버 공부합니다.

0개의 댓글