发布于: 2022-12-8最后更新: 2022-12-10字数 405阅读时长 2 分钟

type
Post
status
Published
date
Dec 8, 2022
slug
chapter-2-of-spring-source-code-series-post-processor-beanpostprocessor
summary
tags
BeanFactoryPostProcessor
category
Spring 源码系列
icon
password

一、三种后置处理器类型

 
在一个Bean初始化前后进行功能增强。
 

三种类型

  • BeanPostProcessor:后置增强 Bean 组件(关键在于改变 Bean
  • BeanFactoryPostProcessor:后置增强 BeanFactory
    • BeanDefinitionRegistryPostProcessor:是 BeanFactoryPostProcessor 的子接口,后置增强 BeanDefinition
  • InitializingBean:Bean 初始化完成后,对组件进行设置(重写方法无参数,关键在于额外处理
 
notion image
 

BeanPostProcessor 几个接口实现类

notion image

二、BeanDefinitionRegistryPostProcessor & BeanFactoryPostProcessor

 

流程图

 
下方从左到右分别是:
  • Spring 容器启动过程
  • 核心组件(指后置处理器)对象创建时机
  • 核心组件重写的方法执行时机
  • 应用实例
 
notion image
 
详细一点的流程图示:
 
notion image
 

GitHub 提交历史信息

 
feat:BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor 后置处理器调动堆栈注释信息

Debug 调用堆栈信息

 
为了方便打断点调试,可以创建下方的几个类,并实现接口,重写父接口所有方法,每个方法增加输出语句并打上断点。
 
notion image
 
 
1、PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors()
  • 执行 BeanDefinitionRegistryPostProcessors 接口重写的方法流程
 
2、PriorityOrdered 或 Ordered 接口实现后置处理器的排序
  • 数字越小优先级越高
  • 源码中我们可以看到 PriorityOrdered 的代码在 Ordered 代码前面,执行完的都会加入已执行的集合,后续的其他实现优先级接口的处理器将不会再次执行。即 PriorityOrdered 和 Ordered 同时实现,也只回以 PriorityOrdered 为准。
 
3、ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry()
  • Spring 内部工厂进行配置类处理

Loading...
Spring 源码系列第三章 - 后置 Bean 处理器与 Bean 生命周期

Spring 源码系列第三章 - 后置 Bean 处理器与 Bean 生命周期


Spring 源码系列第一章 - Spring 核心组件接口

Spring 源码系列第一章 - Spring 核心组件接口