工作内容
这个阶段是对用户自定义扩展的执行器进行调用。
目前已经有两个地方可以进行自定义的扩展:
- 在 ApplicationContext 配置阶段,通过 customizeContext 方法可以加入自定义执行器;
 - 还有就是上个阶段 IOC 容器启动过程 4 - postProcessBeanFactory ()
 
扩展接口分为两类:
| 接口 | 说明 | 
|---|---|
| BeanFactoryPostProcessor | 允许 BeanFactoryPostProcessor 读取到 BeanDefinition ,并可以修改它。 | 
| BeanDefinitionRegistryPostProcessor | 继承自 BeanFactoryPostProcessor,比 BeanFactoryPostProcessor 具有更高的优先级,主要用来在常规的 BeanFactoryPostProcessor 激活之前注册一些 bean 定义。 | 
方法源码如下:
org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors
protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) {PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory,getBeanFactoryPostProcessors());// Detect a LoadTimeWeaver and prepare for weaving, if found in the meantime// (e.g. through an @Bean method registered by ConfigurationClassPostProcessor)if (beanFactory.getTempClassLoader() == null&& beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));}}
看到用户扩展的自定义执行器的方法交给了 PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors 去执行。
这里自定义扩展的执行器,它的执行是有一定的顺序:
首先自定义执行器定义的阶段:
- A阶段:在创建 ApplicationContext 时候注入的自定义执行器;这个阶段的执行器们最先执行;Spring5.2 源码学习 - IOC 容器启动过程 阶段上下文配置中
customizeContext(sc, wac)注入的处理器。 - 其他阶段:其他地方通过接口注册的自定义执行器;
 
其执行顺序如下:
