스프링 컨테이너
스프링 기반 애플리케이션에서는 스프링 컨테이너 안에서 객체가 태어나고, 자라고, 소멸한다.
• 객체를 생성하고, 서로 엮어주고, 이들의 전체 생명주기를 관리한다.
• DI를 이용해서 애플리케이션을 구성하는 컴포넌트를 관리하며, 협력 컴포넌트 간 연관관계의 형성도 여기에서 이뤄진다.
종류
1. 빈 팩토리 (org.springframework.beans.factory.BeanFactory)
DI에 대한 기본적인 지원을 제공하는 가장 단순한 컨테이너
2. 애플리케이션 컨텍스트 (org.springframework.context.ApplicationContext)
빈 팩토리를 확장해 프로퍼티(property) 파일에 텍스트 메시지를 읽고 해당 이벤트 리스너에 대한 애플리케이션 이벤트 발행 같은 애플리케이션 프레임워크 서비스를 제공
a. AnnotationConfigApplicationContext
하나 이상의 자바 기반 설정 클래스에서 스프링 애플리케이션 컨텍스트를 로드한다
b. AnnotationConfigWebApplicationContext
하나 이상의 자바 기반 설정 클래스에서 스프링 웹 애플리케이션 컨텍스트를 로드한다
c. ClassPathXmlApplicationContext
클래스패스에 위치한 XML 파일에서 컨텍스트 정의 내용을 로드한다
d. FileSystemXmlApplicationContext
파일 경로로 지정된 XML 파일에서 컨텍스트 정의 내용을 로드한다
e. XmlWebApplicationContext
웹 애플리케이션에 포함된 XML 파일에서 컨텍스트 정의 내용을 로드한다
빈의 생명주기
1. 스프링이 빈을 인스턴스화한다.
2. 스프링이 값과 빈의 레퍼런스를 빈의 프로퍼티에 주입한다.
3. 빈이 BeanNameAware를 구현하면 스프링이 빈의 ID를 setBeanName() 메서드에 넘긴다.
4. 빈이 BeanFactoryAware를 구현하면 setBeanFactory() 메서드를 호출하여 빈 팩토리 자체를 넘긴다.
5. 빈이 ApplicationContextAware를 구현하면 스프링이 setApplicationContext() 메서드를 호출하고 둘러싼 애플리케이션 컨텍스트에 대한 참조를 넘긴다.
6. 빈이 BeanPostProcessor 인터페이스를 구현하면 스프링은 postProcessBeforeInitialization() 메서드를 호출한다.
7. 빈이 InitializingBean 인터페이스를 구현하면 스프링은 afterPropertiesSet() 메서드를 호출한다.
마찬가지로 빈이 init-method와 함께 선언됐으면 지정한 초기화 메서드가 호출된다.
8. 빈이 BeanPostProcessor를 구현하면 스프링은 postProcessAfterInitialization() 메서드를 호출한다.
9. 이 상태가 되면 빈은 애플리케이션에서 사용할 준비가 된 것이며, 애플리케이션 컨텍스트가 소멸될 때까지 애플리케이션 컨텍스트에 남아 있다.
10. 빈이 DisposableBean 인터페이스를 구현하면 스프링은 destroy() 메서드를 호출한다.
마찬가지로 빈이 destory-method와 함께 선언됐으면 지정된 메서드가 호출된다.
|
이 포스트는 스프링 인 액션을 읽고 개인적으로 필요하다고 생각되는 내용을 정리한 포스트입니다. 일부 내용, 소스코드는 스프링 인 액션의 내용일 수 있습니다. |
'🌱 SPRING > 스프링 인 액션' 카테고리의 다른 글
조건부 빈 (0) | 2018.05.21 |
---|---|
XML로 빈 와이어링하기 (0) | 2018.05.07 |
자바로 빈 와이어링하기 (0) | 2018.05.07 |
빈 와이어링 - 자동 와이어링 (0) | 2018.05.07 |
종속객체 주입 (DI, Dependency Injection) (0) | 2018.05.06 |