一、作用
BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor
postProcessBeanDefinitionRegistry()
在所有bean定义信息将要被加载,bean实例还未创建的
优先于BeanFactoryPostProcessor执行;
利用BeanDefinitionRegistryPostProcessor 给容器中再额外添加一些组件

public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor{ @Override public void postProcessBeanFactory( ConfigurableListableBeanFactory beanFactory) throws BeansException { System.out.println("MyBeanDefinitionRegistryPostProcessor postProcessBeanFactory..."); } @Override public void postProcessBeanDefinitionRegistry( BeanDefinitionRegistry registry) throws BeansException { System.out.println("MyBeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry..."); AbstractBeanDefinition beanDefinition= BeanDefinitionBuilder.rootBeanDefinition(Person.class).getBeanDefinition(); registry.registerBeanDefinition("person02", beanDefinition); } }
@Configuration public class ConfigurationBean { @Bean public MyBeanFactoryPostProcessor myBeanFactoryPostProcessor() { return new MyBeanFactoryPostProcessor(); } @Bean public Person person() { return new Person(); } @Bean public MyBeanDefinitionRegistryPostProcessor myBeanDefinitionRegistryPostProcessor() { return new MyBeanDefinitionRegistryPostProcessor(); } }
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext( ConfigurationBean.class);
控制台打印:
MyBeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry... MyBeanDefinitionRegistryPostProcessor postProcessBeanFactory... all bean names are [org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, configurationBean, myBeanFactoryPostProcessor, person, myBeanDefinitionRegistryPostProcessor, person02] MyBeanFactoryPostProcessor execute...... person construct .... person construct ....
二、应用
如ConfigurationClassPostProcessor\AutowiredAnnotationBeanPostProcessor用来自动装配