本章源码基于Spring Boot 2.2.8
Spring容器初始化的过程中有一步是执行所有的BeanFactoryPostProcessor,对于用户来说,这是Spring提供的hook。
一、BeanFactoryPostProcessor
org.springframework.beans.factory.config.BeanFactoryPostProcessor
始自 2003.07.06
他是Factory hook,能够自定义修改application context的bean definitions,适配application context聚合的bean factory中的bean的属性值。
BeanFactoryPostProcessor是个被大量第三方扩展的后置处理器,扩展的实机是Bean实例化之前,BeanFactory创建之后,此时是一个业务需求的扩展点。
二、Spring有哪些BeanFactoryPostProcessor
在org.springframework.context.support.AbstractApplicationContext中有一个成员变量:
/** BeanFactoryPostProcessors to apply on refresh. */
private final List<BeanFactoryPostProcessor> beanFactoryPostProcessors = new ArrayList<>();
并提供了一个添加的方法:
@Override
public void addBeanFactoryPostProcessor(BeanFactoryPostProcessor postProcessor) {
Assert.notNull(postProcessor, "BeanFactoryPostProcessor must not be null");
this.beanFactoryPostProcessors.add(postProcessor);
}
在这里打上断点,就能看到Spring添加了哪些BeanFactoryPostprocessor