一、作用

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用来自动装配