* 빈 후처리기(Bean Post Processor)란?
- 빈(Bean)의 설정을 후처리(postprocessing)함으로써 빈의 생명 주기와 빈 팩토리의 생명주기에 관여.
- 빈의 초기화 되기 전, 초기화 된 후 2개의 기회를 제공.
- 빈 프로퍼티의 유효성 검사 등에 사용.
- 다른 초기화 메소드인 afterPropertiesSet()과 init-method가 호출되기 직전과 직후에 호출되어짐.
Object postProcessBeforeInitialization(Object bean, String name) throws BeansException;
Object postProcessAfterInitialization(Object bean, String name) trhows BeansException;
...
public class Foo implements BeanPostProcessor {
public void method1() {
// 어떠한 작업..
}
Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
// 초기화 되기 전 처리
}
Object postProcessAfterInitialization(Object bean, String name) throws BeansException; {
// 초기화 된 후 처리
}
BeanFactory factory = new XmlBeanFactory(resource);
BeanPostProcess foo = new Foo();
Factory.addBeanPostProcessor(fool);
<bean id="foo" class="com.sample.Foo" />
Bean Factory를 IoC Container 로 사용하는 경우에는 단순히 addBeanPostProcessor() 메서드를 이용하여 프로그램 방식으로만 빈 후처리기(Bean Post Processor)를 등록함.
* 빈 후처리 과정 (Process of Bean Postprocessing)
1) 빈 객체(Bean Instance) 생성 (생성자(Constructor) 또는 팩토리 메서드(Factory Method) 사용).
2) 빈 프로퍼티(Bean Property)에 값과 빈 레퍼런스 설정.
3) Aware Interface에 정의된 Setter 메서드 호출
4) 빈 인스턴스(Bean Instance)를 각 빈 후처리기(Bean Post Processor)의 postProcessBeforeInitialization() 에 전달.
5) 초기화 Callback 메서드 호출
6) 빈 인스턴스(Bean Instance)를 각 빈 후처리기(Bean Post Processor)의 postProcessAfterInitialization() 에 전달.
7) 빈 사용 준비 완료
8) 컨테이너 종료 후, 소멸(Destructor) Callback 메서드 호출
[BeanFactory 인터페이스]
- 빈 객체를 관리하고 각 빈 객체 간의 의존 관계를 설정해주는 기능 제공.
- 가장 단순한 컨테이너.
[XmlBeanFactory 클래스]
- 외부 자원으로부터 설정 정보를 읽어 와 빈 객체를 생성하는 클래스
덧붙여!
스프링의 빈 객체는 기본적으로 싱글톤(Singleton)으로 생성되는데, 그 이유는 사용자의 요청이 있을 때마다 애플리케이션 로직까지 모두 포함하고 있는 오브젝트를 매번 생성하는 것은 비효율 적이기 때문. 하나의 빈 객체(Bean Object)에 동시에 여러 스레드가 접근할 수 있기 때문에 상태 값을 인스턴스 변수에 저장해 두고 사용할 수 없음. 따라서 싱글톤의 필드에는 의존 관계에 있는 빈에 대한 참조(Reference)나 읽기 전용(Read-Only) 값만을 저장해 두고, 실제 오브젝트의 변화 상태를 저장하느 인스턴스 변수는 두지 않음. 애플리케이션 로직을 포함하고 있는 오브젝트는 대부분 싱글톤 빈(Singleton Bean)으로 만들면 충분함.
하지만, 하나의 빈 설정으로 여러 개의 오브젝트를 만들어서 사용하는 경우도 발생하게 되는데, 이 때는 싱글톤이 아닌 빈을 생성해야 함. 싱글톤이 아닌 빈은 프로토타입 빈(ProtoType Bean)과 스코프 빈(Scope Bean)이 있다.
'개발&컴퓨터 > 개발강좌' 카테고리의 다른 글
스프링 프레임워크 기본 강좌 (12) - 스프링MVC (고전적인 JSP 코딩) (0) | 2015.04.26 |
---|---|
스프링 프레임워크 기본 강좌 (11) - 스프링MVC (Model2) (0) | 2015.04.24 |
스프링 프레임워크 기본 강좌 (9) - 포인트컷, 조인포인트 (0) | 2015.04.20 |
스프링 프레임워크 기본 강좌 (8) - 스프링에서의 AOP + Advice (1) | 2015.04.15 |
스프링(Spring) 프레임워크 기본 개념 강좌 (7) - Patterns (0) | 2015.04.04 |