type
status
date
slug
summary
tags
category
icon
password
一、三种后置处理器类型
在一个Bean初始化前后进行功能增强。
三种类型
- BeanPostProcessor:后置增强 Bean 组件(关键在于改变 Bean)
- BeanFactoryPostProcessor:后置增强 BeanFactory
- BeanDefinitionRegistryPostProcessor:是 BeanFactoryPostProcessor 的子接口,后置增强 BeanDefinition
- InitializingBean:Bean 初始化完成后,对组件进行设置(重写方法无参数,关键在于额外处理)

BeanPostProcessor 几个接口实现类

二、BeanDefinitionRegistryPostProcessor & BeanFactoryPostProcessor
流程图
下方从左到右分别是:
- Spring 容器启动过程
- 核心组件(指后置处理器)对象创建时机
- 核心组件重写的方法执行时机
- 应用实例

详细一点的流程图示:

GitHub 提交历史信息
feat:BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor 后置处理器调动堆栈注释信息
Debug 调用堆栈信息
为了方便打断点调试,可以创建下方的几个类,并实现接口,重写父接口所有方法,每个方法增加输出语句并打上断点。

1、PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors()
- 执行 BeanDefinitionRegistryPostProcessors 接口重写的方法流程
2、PriorityOrdered 或 Ordered 接口实现后置处理器的排序
- 数字越小优先级越高
- 源码中我们可以看到 PriorityOrdered 的代码在 Ordered 代码前面,执行完的都会加入已执行的集合,后续的其他实现优先级接口的处理器将不会再次执行。即 PriorityOrdered 和 Ordered 同时实现,也只回以 PriorityOrdered 为准。
3、ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry()
- Spring 内部工厂进行配置类处理
- 作者:ITNXD
- 链接:https://blog.itnxd.eu.org/article/chapter-2-of-spring-source-code-series-post-processor-beanpostprocessor
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

