'lifecycle'에 해당되는 글 2건

  1. 2007.12.17 LifeCycle 확장
  2. 2007.12.17 LifeCycle

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 째코

LifeCycle

Spring/Core 2007.12.17 19:24

bean이 생성 될때 다음의 초기화 작업들이 수행 됩니다.
1. BeanNameAware's - setBeanName
2. BeanClassLoaderAware's - setBeanClassLoader
3. BeanFactoryAware's - setBeanFactory
4. ResourceLoaderAware's - setResourceLoader (ApplicationContext 일 경우)
5. ApplicationEventPublisherAware's - setApplicationEventPublisher
(ApplicationContext 일 경우)
6. MessageSourceAware's - setMessageSource
(ApplicationContext 일 경우)
7. ApplicationContextAware's - setApplicationContext (ApplicationContext 일 경우)
8. ServletContextAware's - setServletContext (WebApplicationContext 일 경우)
9. BeanPostProcessors - postProcessBeforeInitialization
10. InitializingBean's afterPropertiesSet
11. XML에 정의된 init-method
12.
BeanPostProcessors - postProcessAfterInitialization

아래는 컨테이너가 종료될때 수행되는 작업입니다.
1. DisposableBean's - destroy
2. XML에 정의된 destroy-method

1~12번 까지의 인터페이스들 중 BeanPostProcessors는 Spring의 후처리기로써 다른 인터페이스들 보다 좀 더 특별한 기능을 합니다. BeanPostProcessors는 따로 알아보도록 하고 나머지 인터페이스들을 모두 구현하여 테스트 해보겠습니다.
(WebApplicationContext가 아니기 때문에
ServletContextAware는 제외 했습니다.)

설정 파일

테스트 파일

출력결과
BeanNameAware - setBeanName 호출
BeanClassLoaderAware - setBeanClassLoader 호출
BeanFactoryAware - setBeanFactory 호출
ResourceLoaderAware - setResourceLoader 호출
ApplicationEventPublisherAware - setApplicationEventPublisher 호출
MessageSourceAware - setMessageSource 호출
ApplicationContextAware - setApplicationContext 호출
InitializingBean - afterPropertiesSet 호출
Custom init-method 호출

신고

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

불가능은 없다. 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
메소드 삽입  (0) 2007.12.14
Posted by 째코