2024. 10. 18. 12:10ㆍSpring Boot/Spring Boot Auto Configuration
PostProcessorRegistrationDelegate
는 Spring Framework에서 매우 중요한 클래스이며, 주로 BeanFactoryPostProcessor
와 BeanPostProcessor
의 등록 및 실행 과정을 관리합니다. 이 클래스는 Spring의 빈 초기화 과정에서 다양한 후처리기를 적절한 순서로 등록하고 실행하는 역할을 하며, 빈 생성 및 설정 과정에서 사용자 정의 로직을 포함할 수 있도록 확장성을 제공합니다.
Spring의 후처리기 (Post Processors)
Spring에는 두 가지 주요 후처리기 타입이 있습니다:
BeanFactoryPostProcessor
: 빈 객체들이 생성되기 전에BeanFactory
를 조작할 수 있는 후처리기입니다. 예를 들어,PropertyPlaceholderConfigurer
같은 후처리기가@Value
나${}
표현식을 처리하여 빈 정의에서 필요한 값을 설정합니다.BeanPostProcessor
: 빈이 생성되고 나서 초기화되기 전과 후에 추가적인 로직을 적용할 수 있도록 해주는 후처리기입니다. 이 후처리기를 통해 빈이 생성된 후 추가적인 설정을 하거나, 프록시 객체로 wrapping하여 AOP 기능을 적용할 수 있습니다.
PostProcessorRegistrationDelegate
는 이 두 가지 후처리기를 등록하고 실행하는 핵심 로직을 관리합니다. 이를 통해 Spring 애플리케이션의 확장성과 유연성이 극대화됩니다.
PostProcessorRegistrationDelegate
의 주요 역할
1. BeanFactoryPostProcessor
등록 및 실행
Spring 컨테이너가 초기화될 때, BeanFactoryPostProcessor
는 BeanFactory
의 구성 정보를 변경할 수 있습니다. 이 클래스는 애플리케이션 컨텍스트 초기화 중에 다음과 같은 단계로 후처리기를 등록하고 실행합니다.
- 등록된
BeanFactoryPostProcessor
검색: 애플리케이션 컨텍스트에서 사용자 정의 또는 Spring 내부에서 제공하는BeanFactoryPostProcessor
빈을 모두 검색합니다. - 정렬:
BeanFactoryPostProcessor
는 빈 팩토리 내에서 빈 정의를 수정할 수 있는데, 이러한 후처리기들은 실행 순서에 따라 관리됩니다. 이를 위해PriorityOrdered
,Ordered
인터페이스를 구현한 후처리기는 우선순위에 따라 정렬됩니다.PriorityOrdered
: 가장 높은 우선순위를 가집니다.Ordered
: 우선순위가 낮지만 명시적인 순서를 가집니다.- 그 외의 후처리기들은 순서 없이 나중에 실행됩니다.
- 실행: 정렬된 후처리기들을 차례대로 실행합니다. 이때, 각
BeanFactoryPostProcessor
는ConfigurableListableBeanFactory
에 접근할 수 있고, 이를 통해 빈 정의를 읽고 수정할 수 있습니다.
예시:
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
// 빈 정의 수정 작업 가능
BeanDefinition bd = beanFactory.getBeanDefinition("someBean");
bd.getPropertyValues().add("property", "newValue");
}
}
위와 같은 후처리기는 빈 정의를 변경할 수 있으며, Spring 컨테이너가 이를 반영해 이후에 빈을 생성합니다.
2. BeanPostProcessor
등록 및 실행
BeanPostProcessor
는 실제 빈이 생성된 이후에 빈에 추가적인 작업을 할 수 있게 해줍니다. 예를 들어 AOP 프록시 생성이나 빈 객체에 추가적인 설정을 적용할 수 있습니다. PostProcessorRegistrationDelegate
는 빈 생성 후 이러한 후처리기를 적절히 실행할 수 있도록 다음과 같은 작업을 합니다.
- 등록된
BeanPostProcessor
검색: 애플리케이션 컨텍스트 내에서 등록된 모든BeanPostProcessor
빈을 검색하고 등록합니다. - 정렬:
BeanPostProcessor
도 우선순위에 따라 정렬됩니다.PriorityOrdered
,Ordered
인터페이스를 구현한 후처리기들이 먼저 등록되며, 그 이후 일반적인BeanPostProcessor
들이 등록됩니다. - 등록: 모든
BeanPostProcessor
는BeanFactory
에 등록되어, 빈이 생성되고 나면 자동으로 이 후처리기가 실행됩니다.postProcessBeforeInitialization
메서드는 빈이 초기화되기 전에 실행되고,postProcessAfterInitialization
메서드는 빈이 초기화된 후에 실행됩니다.
예시:
public class CustomBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// 빈 초기화 전 작업
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// 빈 초기화 후 작업
return bean;
}
}
이 과정은 특히 AOP와 같은 Spring의 핵심 기능에서 중요합니다. 예를 들어, AnnotationAwareAspectJAutoProxyCreator
는 BeanPostProcessor
를 통해 자동 프록시 생성 기능을 제공합니다.
3. MergedBeanDefinitionPostProcessor
처리
MergedBeanDefinitionPostProcessor
는 BeanPostProcessor
의 특수한 서브 인터페이스로, 실제 빈이 생성되기 전에 빈 정의(BeanDefinition
)를 조작할 수 있는 기능을 제공합니다. PostProcessorRegistrationDelegate
는 이 후처리기들이 적절한 시점에 호출되도록 보장합니다.
4. ApplicationListenerDetector
등록
ApplicationListenerDetector
는 Spring 애플리케이션 컨텍스트에서 이벤트 리스너를 자동으로 탐지하고 등록하는 역할을 합니다. PostProcessorRegistrationDelegate
는 이 후처리기도 적절히 등록하여 애플리케이션 이벤트가 발생할 때 자동으로 리스너가 호출될 수 있도록 합니다.
5. AOP 및 기타 후처리기 등록
Spring AOP와 관련된 여러 후처리기들도 PostProcessorRegistrationDelegate
에 의해 등록됩니다. 특히 AutoProxyCreator
와 같은 후처리기는 Spring의 AOP 기능이 활성화된 경우, 빈을 AOP 프록시로 감싸는 역할을 합니다. 이는 빈의 메서드 호출을 가로채고, 메서드 실행 전에 트랜잭션이나 보안 관련 로직을 적용할 수 있게 해줍니다.
상세 동작 흐름
- 후처리기 탐색: 애플리케이션 컨텍스트 초기화 중에 등록된
BeanFactoryPostProcessor
와BeanPostProcessor
들을 탐색합니다. - 순서에 따른 정렬: 각 후처리기를
PriorityOrdered
,Ordered
, 그 외 순서로 정렬합니다. BeanFactoryPostProcessor
실행:BeanFactoryPostProcessor
를 차례로 실행하여 빈 정의를 수정할 기회를 제공합니다. 이때,ConfigurableListableBeanFactory
를 인자로 받아 빈 정의를 수정하거나 다른 설정 작업을 할 수 있습니다.BeanPostProcessor
등록: 이후 빈 초기화 과정에서 사용할BeanPostProcessor
들을BeanFactory
에 등록합니다.- 빈 초기화: 빈이 생성되고 초기화될 때
BeanPostProcessor
가 실행됩니다.postProcessBeforeInitialization
과postProcessAfterInitialization
메서드를 통해 빈 초기화 전후로 로직이 실행됩니다.
결론
PostProcessorRegistrationDelegate
는 Spring 프레임워크의 핵심 클래스로, 빈 초기화 및 설정 과정에서 BeanFactoryPostProcessor
와 BeanPostProcessor
를 적절히 관리하고 실행하는 역할을 합니다. 이를 통해 Spring은 빈 초기화 전에 정의를 수정하거나, 빈 생성 후 추가적인 설정을 적용하는 등 확장 가능한 구조를 제공하게 됩니다. 이 클래스는 Spring의 내부에서 많은 복잡한 로직을 담당하며, 후처리기의 순서 보장, AOP 적용, 빈 정의 수정 등의 핵심 기능을 수행합니다.
'Spring Boot > Spring Boot Auto Configuration' 카테고리의 다른 글
DefaultListableBeanFactory (1) | 2024.10.18 |
---|---|
ConfigurationClassParser (0) | 2024.10.18 |
AnnotationConfigServletWebServerApplicationContext (0) | 2024.10.18 |
AutoConfigurationImportSelector (0) | 2024.10.18 |
DeferredImportSelector (0) | 2024.10.17 |