Skip to content

BeanDefinitionRegistryPostProcessor

BeanDefinitionRegistryPostProcessor 接口

完成对 BeanDefinition 的新增、修改;

java
public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {
	void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
}

BeanFactoryPostProcessor 接口

可以 获取到 ConfigurableListableBeanFactory 对象。在项目中 controller, service 等 bean 未实例化之前,注册一些自定义组件 bean 到 Spring 容器中。

java
@FunctionalInterface
public interface BeanFactoryPostProcessor {
    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

Spring 核心方法中 invokeBeanFactoryPostProcessors(beanFactory);

在 Spring 核心流程中,invokeBeanFactoryPostProcessors(beanFactory); 方法完成了对实现了 BeanDefinitionRegistryPostProcessorBeanFactoryPostProcessor 接口的调用。

其中,BeanDefinitionRegistryPostProcessor 继承了 BeanFactoryPostProcessor。

这个方法对以上两个接口的实现类做了实例化注册到 Spring 容器并完成对上面这两个接口的调用,调用顺序如下:

  1. BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry);
  2. BeanDefinitionRegistryPostProcessor.postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory);
  3. BeanFactoryPostProcessor.postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory);

使用示例

参考博客:ClassPathBeanDefinitionScanner 自定义注解扫描器