type
status
date
slug
summary
tags
category
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 内部工厂进行配置类处理
Spring 源码系列第三章 - 后置 Bean 处理器与 Bean 生命周期Spring 源码系列第一章 - Spring 核心组件接口
Loading...
ITNXD
ITNXD
一个普通的干饭人🍚
最新发布
Java 并发编程
2025-7-31
Spring 源码系列第三章 - 后置 Bean 处理器与 Bean 生命周期
2022-12-25
Spring 源码系列第一章 - Spring 核心组件接口
2022-12-11
Spring 源码系列第二章 - 后置工厂处理器与 Bean 生命周期
2022-12-10
行为型模式之迭代器设计模式
2022-12-2
行为型模式之责任链设计模式
2022-12-1