Spring 后置处理器 BeanPostProcessor

  • 时间:2025-10-27 22:53 作者: 来源: 阅读:3
  • 扫一扫,手机访问
摘要:bean的生命周期包含实例化,属性赋值,初始化,使用,销毁等五个阶段。如果我们想在Spring容器创建bean的过程中做点小动作该如何做呢?这个就涉及到后置处理器BeanPostProcessor与InstantiationAwareBeanPostProcessor了,在这里我们先介绍一下BeanPostProcessor,它是针对 bean 的扩展,主要

bean的生命周期包含实例化,属性赋值,初始化,使用,销毁等五个阶段。如果我们想在Spring容器创建bean的过程中做点小动作该如何做呢?这个就涉及到后置处理器BeanPostProcessor与InstantiationAwareBeanPostProcessor了,在这里我们先介绍一下BeanPostProcessor,它是针对 bean 的扩展,主要是用在 bean 实例化之后,执行初始化方法前后,让开发人员可以对 bean 实例进行修改。高度概括一下它的工作就是在 bean 的初始化前后做一些额外的处理。当然如果存在多个BeanPostProcessor的实例并且想指定先后顺序执行,这个实则也是可以的,只要设置 order 属性就可以控制这些 BeanPostProcessor 实例的运行顺序。

BeanPostProcessor 是一个接口,它定义了两个方法。一个为postProcessBeforeInitialization一个为postProcessAfterInitialization 。




Spring 后置处理器  BeanPostProcessor

1:postProcessBeforeInitialization 

postProcessBeforeInitialization 方法会在 bean 的初始化回调之前执行。

2:postProcessAfterInitialization 

 postProcessAfterInitialization 方法会在 bean 的初始化回调之后执行。

目前我们测试一下,我们新建一个HaizeiwangBeanPostProcessor类继承BeanPostProcessor方法,并重写其中的postProcessBeforeInitialization 与postProcessAfterInitialization 方法。

在bean初始化之前我们判断如果是haizeiwang的bean实例则进行一些属性赋值操作,我们运行一下看看控制台会输出什么。




Spring 后置处理器  BeanPostProcessor




Spring 后置处理器  BeanPostProcessor

我们发目前haizeiwang这个bean初始化之前进入postProcessBeforeInitialization方法,我们做了属性赋值操作。控制台输出如下所示。我们发目前初始化之前海贼王这个bean里的name与remark字段都是null.当我们重写了postProcessBeforeInitialization方法判断如果bean的实例为haizeiwang则赋值。所以在初始化之后haizeiwang的两个字段就有值了。




Spring 后置处理器  BeanPostProcessor

这个时候我有个疑问,postProcessBeforeInitialization与postProcessAfterInitialization的入参bean都为Object,如果我是个开发人员误操作返回一个null怎么办?我们可以试一下看看返回是什么。我们发现结果还是一样。




Spring 后置处理器  BeanPostProcessor




Spring 后置处理器  BeanPostProcessor

为什么我们postProcessBeforeInitialization方法最终返回的是null,但是postProcessAfterInitialization输出的还是与原来一样呢?我们debug可以看一下,发现当returnnull的时候进入到AbstractAutowireCapableBeanFactory下的applyBeanPostProcessorsBeforeInitialization方法。里面判断这个content如果为null,则直接返回当前的bean。




Spring 后置处理器  BeanPostProcessor




Spring 后置处理器  BeanPostProcessor




Spring 后置处理器  BeanPostProcessor

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】Spring Boot3 中实现按模板导出 Word 文档合同的技术指南(2025-10-30 16:04)
【系统环境|】openPangu-Ultra-MoE-718B-V1.1今日正式开源,部署指南来啦!(2025-10-30 16:03)
【系统环境|】Ubuntu + vLLM + DeepSeek 本地部署完全指南(2025-10-30 16:03)
【系统环境|】如何用公众号AI编辑器实现一键排版?一份完整的5步指南(2025-10-30 16:02)
【系统环境|】Spring Boot 与 Nacos 完美整合指南(2025-10-30 16:01)
【系统环境|】Rust MCP开发指南:让AI与应用对话的桥梁(2025-10-30 16:00)
【系统环境|】MCP Server 开发实战指南(2025-10-30 15:59)
【系统环境|】入门指南:使用 Playwright MCP Server 为你的 AI Agent 赋予能力(2025-10-30 15:58)
【系统环境|】一个IT女搬砖工的情人节爱心礼物指南及衍伸 v16.02.14(2025-10-30 15:57)
【系统环境|】百元矿渣显卡淘金全指南(2025-10-30 15:57)
手机二维码手机访问领取大礼包
返回顶部