关于java:图解BeanFactoryPostProcessor

28次阅读

共计 1625 个字符,预计需要花费 5 分钟才能阅读完成。

spring 学习之源码剖析 –AbstractApplicationContext 之 refresh 也提过了这个接口,这里用图解的形式从新看看这个接口。他这里有个办法,办法的参数是 ConfigurableListableBeanFactory 类型的。在这里咱们能够剖析和批改 bean 定义以及预实例化单例的工具。

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

另外,还有一个接口,BeanDefinitionRegistryPostProcessor,继承了 BeanFactoryPostProcessor 接口,咱们看看他的办法的参数,是 BeanDefinitionRegistry 类型的,在这里咱们能够注册 bean、移除 bean 等。

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

在 refresh 调用 invokeBeanFactoryPostProcessors 办法的时候,其实就是对下面两个接口的实现类的解决。

BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry

首先执行的是 BeanDefinitionRegistryPostProcessor 的 postProcessBeanDefinitionRegistry 办法,他的程序如下:

  • 先调用继承了 BeanDefinitionRegistryPostProcessor 以及 PriorityOrdered 的子类,如果有多个实现了 PriorityOrdered 接口的类,那看 order 小的先执行。
  • 再调用继承了 BeanDefinitionRegistryPostProcessor 以及 Ordered 的子类,如果有多个实现了 Ordered 接口的类,那看 order 小的先执行。
  • 最初调用继承了 BeanDefinitionRegistryPostProcessor 的子类。

BeanDefinitionRegistryPostProcessor#postProcessBeanFactory

而后执行 BeanDefinitionRegistryPostProcessor 的 postProcessBeanFactory 办法,他的程序同上。

BeanFactoryPostProcessor#postProcessBeanFactory

BeanDefinitionRegistryPostProcessor 的子类执行实现后,这个时候才到 BeanFactoryPostProcessor 的子类执行 postProcessBeanFactory 办法,他的程序如下:

  • 先调用继承了 BeanFactoryPostProcessor 以及 PriorityOrdered 的子类,如果有多个实现了 PriorityOrdered 接口的类,那看 order 小的先执行。
  • 再调用继承了 BeanFactoryPostProcessor 以及 Ordered 的子类,如果有多个实现了 Ordered 接口的类,那看 order 小的先执行。
  • 最初调用继承了 BeanFactoryPostProcessor 的子类。


以上就是 BeanFactoryPostProcessor 的调用过程,源码之前剖析了这里就不做剖析,你在理论生成中有用到这个接口吗,欢送评论区探讨。

正文完
 0