// 1. 컨테이너 초기화
ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
// 2. 컨테이너 사용
UserDao dao = context.getBean("userDao", UserDao.class);
// 3. 컨테이너 종료
context.close();
컨테이너가 관리하는 Bean의 라이프사이클은 객체생성
- 의존설정
- 초기화
- 소멸
순서이다.
스프링 컨테이너가 초기화 할 때, 빈 객체를 설정 정보에 따라 생성하고, 의존 관계를 설정한다. 의존 설정이 완료되면, 빈 객체가 지정한 메소드를 호출해 초기화한다. 컨테이너가 종료될 시 빈 객체가 지정한 메소드를 호출해 빈 객체의 소멸을 처리한다.
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
public interface DisposableBean{
void destroy() throws Exception;
}
@Bean(initMethod="connectDB", destroyMethod="commit")
DI를 공부할 때 배웠던 것처럼 기본적으로 생성되는 빈 객체는 싱글톤
의 범위를 갖는다. new로 생성하는 것과 달리 늘 같은 오브젝트를 얻는다. 하지만 Scope 설정을 통해 매번 새로운 객체를 받을 수 있다.
@Bean
@Scope("prototype")
public UserDao userDao() {
return new UserDao();
}
prototype
으로 설정하면 컨테이너가 소멸 메소드를 실행하지 않기 때문에 소멸 처리를 직접 해야한다.
스프링 공식 사이트를 보니 웹을 위한 scope 외에는 singleton과 prototype 뿐이다.
request
". Supported in addition to the standard scopes "singleton" and "prototype".session
". Supported in addition to the standard scopes "singleton" and "prototype".