当前位置: 首页 > news >正文

BeanPostProcesspost.ProcessBeforeInitialization() 和BeanPostProcessor.postProcessBeforeInitializatio

Spring Bean 的完整生命周期

为了理解这两个方法的区别,先看完整的 Bean 生命周期:

┌─────────────────────────────────────────────────────────┐
│ Spring Bean 生命周期 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 实例化前 (Instantiation Before) │
│ ↓ postProcessBeforeInstantiation() │
│ │
│ 2. 实例化 (Instantiation) │
│ - 调用构造器创建对象 │
│ ↓ │
│ │
│ 3. 实例化后 (Instantiation After) │
│ ↓ postProcessAfterInstantiation() │
│ │
│ 4. 属性填充 (Populate Bean) │
│ - @Autowired 注入依赖 │
│ ↓ │
│ │
│ 5. 初始化前 (Initialization Before) │
│ ↓ postProcessBeforeInitialization() │
│ │
│ 6. 初始化 (Initialization) │
│ - @PostConstruct │
│ - InitializingBean.afterPropertiesSet() │
│ - init-method │
│ ↓ │
│ │
│ 7. 初始化后 (Initialization After) │
│ ↓ postProcessAfterInitialization() │
│ │
│ 8. Bean 就绪,可以使用 │
│ ↓ │
│ │
│ 9. 销毁前 │
│ - @PreDestroy │
│ - DisposableBean.destroy() │
│ - destroy-method │
│ │
└─────────────────────────────────────────────────────────┘
三、两个关键方法详解
📌 方法 1:postProcessBeforeInstantiation()
所属接口:InstantiationAwareBeanPostProcessor(继承自 BeanPostProcessor)
执行时机:在 Bean 实例化之前(调用构造器之前)
方法签名:

@Nullable
default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName)
throws BeansException {
return null;
}
返回值:
返回 null:继续正常的 Bean 创建流程
返回非 null:跳过正常的实例化和初始化,直接使用该对象
典型应用场景:
AOP 代理对象的提前创建
自定义 Bean 创建逻辑
使用自定义逻辑替代 Spring 的默认实例化

方法 2:postProcessBeforeInitialization()
所属接口:BeanPostProcessor
执行时机:在 Bean 实例化之后、初始化之前(属性已填充,但 @PostConstruct 等还未执行)
方法签名:

@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
return bean;
}
返回值:
返回原始 bean 或包装后的 bean
不能返回 null(否则会抛出异常)
典型应用场景:
在 @PostConstruct 之前做一些预处理
检查 Bean 的状态
动态修改 Bean 的属性

http://www.jsqmd.com/news/1067333/

相关文章:

  • 从零构建生产级Adapter层,手把手实现模型-协议-治理三态统一,附GitHub Star超2.4k的开源参考实现
  • 鸿蒙6.0应用开发——自动化测试框架开发
  • 【小白向】新手快速拥有桌面 AI,虾壳云一键部署 OpenClaw v2.7.9 全程自动配置(最新安装包)
  • 餐桌转盘无刷电机驱动板应用技术与优势解析
  • 【行业系列辑】聚焦中小银行自主创新:麒麟信安从系统迁移到业务上云的金融落地实践
  • 2026年AI数字人制作平台哪个好?先看克隆效率、质量
  • 为啥对方转义的json字符串我不能直接透传
  • 腾讯地图多场景开发实测避坑指南
  • 告别 oh-my-openagent 版本地狱:一套纯 OpenCode 配置实现 Agent 软路由
  • 20260622AA
  • Java项目版本自增+打包上传服务器部署脚本
  • 美团内审内控负责人,分享AI时代的内控新范式
  • PowerEdge R650进入救援模式的方法
  • 收藏!CAD高手都在用的6个实用功能,看图改图效率拉满
  • GLM-5.2 与 Claude Opus 4.8 正面较量:成本、速度、质量谁更胜一筹?
  • 2026工业废水用聚丙烯酰胺生产厂家 4大维度深度对比
  • 好用的角膜塑形镜哪个公司好
  • WecomApi 看 AI 与 CRM 深度绑定的工程实践如何避免沦为“死板复读机”?
  • 从618复盘看AI工作流:电商营销图自动化正在成为新的运营效率工具
  • 品牌AI心智指数如何计算:提及率、推荐率与综合得分的基础框架
  • Fragnesia漏洞信息与实测
  • 矿用LCFB-12护套连接器控制线缆详细介绍‌
  • 小雅差点被会议纪要逼疯
  • 【实战】:零成本配置 AMD ROCm 云环境并跑通 Gemma4-E4B云端大模型
  • 鸡饲料颗粒机厂家
  • 告别手机发烫卡顿!云手机才是手游挂机党的好用工具
  • 零壹教育:网络识别爬虫的手段 ,为什么越来越复杂
  • 5款超实用格式转换工具实测|办公、影音、苹果设备全覆盖
  • Python函数,模块,类的调用方法
  • GGUF 量化模型在 Strix Halo 上的表现,精度与速度的最佳平衡