(스프링) 1장 애플리케이션 컨텍스트 및 빈의 일생
*스프링 기반 애플리케이션에서는 스프링 컨테이너(container)안에서 객체가 태어나고, 자라고, 소멸한다.
스프링 컨테이너는 객체를 생성하고, 서로 엮어주고, 이들의 전체 생명주기를 관리한다.
*스프링 컨테이너는 여러가지가 있다.
1. 빈 팩토리(org.springframework.beans.factory.BeanFactory)로 이는 DI에 대한 기본적인 지원을 제공하는 가장 단순한 컨테이너다.
2. 애플리케이션 컨텍스트(org.springframework.context.ApplicationContext)로, 빈 팩토리를 확장해 프로퍼티(property)파일에 텍스트 메시지를 읽고 해당 이벤트리스너(Listener)에 대한 애플리케이션 이벤트 발행 같은 애플리케이셔 프레임워크 서비스를 제공하는 컨테이너다.
-->빈팩토리는 지나치게 저수준의 기능을 제공하므로 보통 애플리케이션 컨텍스트를 더 선호 한다.
<애플리케이션 컨텍스트의 종류>
스프링 컨테이너는 객체를 생성하고, 서로 엮어주고, 이들의 전체 생명주기를 관리한다.
*스프링 컨테이너는 여러가지가 있다.
1. 빈 팩토리(org.springframework.beans.factory.BeanFactory)로 이는 DI에 대한 기본적인 지원을 제공하는 가장 단순한 컨테이너다.
2. 애플리케이션 컨텍스트(org.springframework.context.ApplicationContext)로, 빈 팩토리를 확장해 프로퍼티(property)파일에 텍스트 메시지를 읽고 해당 이벤트리스너(Listener)에 대한 애플리케이션 이벤트 발행 같은 애플리케이셔 프레임워크 서비스를 제공하는 컨테이너다.
-->빈팩토리는 지나치게 저수준의 기능을 제공하므로 보통 애플리케이션 컨텍스트를 더 선호 한다.
<애플리케이션 컨텍스트의 종류>
- AnnotationConfigApplicationContext- 하나 이상의 자바 기반 설정 클래스에서 스프링 애플리케이션 컨텍스트를 로드한다.
- AnnotationConfigWebApplicationContext- 하나 이상의 자바 기반 설정 클래스에서 스프링 엡 애플리케이션 컨텍스트를 로드한다.
- ClassPathXmlApplicationContext- 클래스패스(classpath)에 위치한 XML파일에서 컨텍스트 정의내용을 로드한다.
- FileSystemXmlApplicationContext- 파일 시스템에서, 즉 파일경로로 지저된 XML파일에서 컨텍스트 정의 내용을 로드한다.
- XmlWebApplicationContext- 웹 애플리케이션에 포함된 XML파일에서 컨텍스트 정의 내용을 로드한다.
예) ApplicationContext context=new FileSystemXmlApplicationContext("c:\knight.xml");
ApplicationContext context=ClassPathXmlApplicationContext("knight.xml");
<빈의 일생>
인스턴스화-> 프로퍼티 할당->BeanNameAware의 setBeanName()->BeanFactoryAware의 setBeanFactory() -> ApplicationContextAware의 setApplicationContext() -> BeanPostProcessors의 사전 초기화 -> InitializingBean의 afterPropertiesSet() -> 커스텀호출 메소드 초기화 -> BeanPostProcessor의 후속초기화----------->
--------빈을 사용할 준비가 완료된다.----------------------
----------컨테이너가 종료된다.-----------------------------------------
DisposableBean의 destroy() --->커스텀 소멸 메소드호출
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와 함께 선언됐으면 지정된 메소드가 호출된다.
댓글
댓글 쓰기