LifeCycle 확장

Spring/Core 2007. 12. 17. 20:48

BeanPostProcessor(후처리기)를 구현한 bean은 다른 bean보다 먼저 생성이 되며 후처리기로 등록이 됩니다. 그 이후 일반적인 bean들이 생성 될 때 이 후처리기를 거치게 됩니다.
Spring에 기본적으로 등록된 BeanPostProcessor's 도 상당히 많습니다.
대표적으로 ApplicationContextAwareProcessor가 있습니다. 이 후처리기의 이름이 전혀 낯설지가
않은 이유는 앞서 소개 했던 ApplicationContext 컨테이너에서 작동되는 LifeCycle 인터페이스
(ResourceLoaderAware,ApplicationEventPublisherAware, MessageSourceAware, ApplicationContextAware) 의 메소드를 호출하는 후처리기이기 때문 입니다.

LifeCycle을 확장할 수 있는 또 하나의 인터페이스인 BeanFactoryPostProcessorBeanPostProcessor 보다 먼저 생성이 되며 생성 직후 postProcessBeanFactory 메소드가 호출 됩니다. 이 것은 컨테이너가 시작 될때 아직 생성 되지 않은 일반적인 bean 설정정보에 대한 조작을 가능케 합니다. 대표적으로 흔히 사용되는 PropertyPlaceholerConfigurer 가 있습니다.

2개 이상의 후처리기를 사용 할 경우 여러가지 요인에 의해 어떤 후처리기가 먼저 등록될지
예측 하기란 어렵습니다. 정확한 순서를 결정하기 위해서 Ordered인터페이스를 구현하면
됩니다.

간단한 예제 입니다.

CustomFactoryPostProcessor 클래스

CustomPostProcessor 클래스

설정파일

출력결과
CustomFactoryPostProsessor 생성
BeanFactoryPostProcessor - postProcessBeanFactory 호출
CustomPostProcessor 생성
Foo 생성
BeanPostProcessor - postProcessBeforeInitialization 호출
BeanPostProcessor - postProcessAfterInitialization 호출
Foo 생성
BeanPostProcessor - postProcessBeforeInitialization 호출
BeanPostProcessor - postProcessAfterInitialization 호출

앞서 설명 했던 것처컨테이너가 시작 될 때 CustomFactoryPostProsessor가
생성이 되고 바로
postProcessBeanFactory메소드가 호출 됩니다. 그 후 CustomPostProcessor 가 생성되며 이후에 생성 되는 일반적인  bean들은 CustomPostProcessor 를 거치게 됩니다.

'Spring > Core' 카테고리의 다른 글

MessageSource 사용하기(다국어 지원)  (0) 2007.12.19
불가능은 없다. FactoryBean  (0) 2007.12.19
LifeCycle 확장  (0) 2007.12.17
LifeCycle  (0) 2007.12.17
<aop:scoped-proxy /> 작동 방식  (5) 2007.12.14
Bean scopes  (0) 2007.12.14
Posted by 째코

댓글을 달아 주세요