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

一文讲清楚Spring Bean的生命周期(附详细流程图)

01-什么是Bean的生命周期

Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。

所谓的生命周期就是:对象从创建开始到最终销毁的整个过程

02-为什么要知道Bean的生命周期

生命周期的本质:在哪个时间节点上调用了哪个类的哪个方法

我们需要充分的了解在这个生命线上,都有哪些特殊的时间节点。 只有我们知道了特殊的时间节点都在哪,到时我们才可以确定代码写到哪

03-Bean的生命周期之5步

Bean生命周期的管理,可以参考Spring的源码:AbstractAutowireCapableBeanFactory类的doCreateBean()方法
Bean生命周期可以粗略的划分为五大步:

  • 第一步:实例化Bean—— 调用无参数构造方法

  • 第二步Bean属性赋值—— 调用set() 方法

  • 第三步:初始化Bean—— 会调用Bean的 init() 方法,init() 方法需要自己写,自己配置,方法名随意

  • 第四步:使用Bean

  • 第五步:销毁Bean—— 会调用Bean的 destroy() 方法,这个方法需要自己写,自己配置,方法名随意

注意点:只有正常关闭spring容器,bean的销毁方法才会被调用

04-Bean生命周期之7步 —— 面试

在以上的5步中,第3步是初始化Bean,如果你还想在初始化前和初始化后添加代码,可以加入“Bean后处理器”

编写一个类实现BeanPostProcessor类,并且重写before和after方法

import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; @Component public class LogBeanPostProcessor implements BeanPostProcessor { // 方法有两个参数: // 第一个参数:刚创建的bean对象 // 第二个参数:bean的名字 // 在调用initBean()前执行,即初始化Bean方法执行之前调用 @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("Bean后处理器的before方法执行,即将开始初始化"); return bean; } // 在调用initBean()后执行,即初始化Bean方法执行之后调用 @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("Bean后处理器的after方法执行,已完成初始化"); return bean; } }

如果加上Bean后处理器的话,Bean的生命周期就是7步了:

掌握以上7步应付面试足矣

05-Bean生命周期之10步

关于上图中检查Bean是否实现了Aware的相关接口的说明:
Aware相关的接口包括:BeanNameAwareBeanClassLoaderAwareBeanFactoryAware

  • 当Bean实现了BeanNameAware,Spring会将Bean的名字传递给Bean

  • 当Bean实现了BeanClassLoaderAware,Spring会将加载该Bean的类加载器传递给Bean

  • 当Bean实现了BeanFactoryAware,Spring会将Bean工厂对象传递给Bean

对于SpringBean的生命周期,掌握之前的7步即可,够用

http://www.cnnetsun.cn/news/91042.html

相关文章:

  • 【Dify与Spring AI兼容性深度解析】:掌握版本匹配的5大核心原则
  • LobeChat能否支持引力波探测?宇宙事件捕捉与信号解读
  • 基于Next.js的LobeChat为何成为开发者新宠?
  • LobeChat压力测试报告:每秒可承受多少并发请求?
  • LobeChat能否对接IFTTT?事件驱动型AI助手构建
  • 10 个降AI率工具,研究生高效避坑指南
  • 从0到1构建智能检索系统,Dify结果融合实战全指南
  • 【混合检索优化实战】:Dify响应时间降低50%的三大核心技术揭秘
  • 版本失控怎么办?Dify工作流回滚全攻略,保障系统稳定性
  • 多路径流程设计难题,Dify工作流跳转配置一招搞定
  • 【Dify工作流依赖检查全攻略】:掌握高效排查技巧,避免上线事故
  • 思科网络发现协议CDP基础
  • 思科网络设备密码配置技术基础1
  • 部署Qwen3-VL-30B:多模态大模型实战指南
  • Wan2.2-T2V-A14B部署指南:快速构建高保真视频生成能力
  • 《机器人:智能时代的“钢铁伙伴“》
  • OpenAI gpt-oss-20b 模型部署与优化全指南
  • 《基于RK3588+ToF的环境颜色区域位置识别方案研究》
  • Qwen-Image低显存部署与中文海报生成实战
  • 【Dify Tesseract 运维必修课】:深入理解增量更新与回滚机制的黄金法则
  • 中文文档最完善的AI前端项目?LobeChat当之无愧
  • (Docker标签管理黄金法则):支撑千亿参数模型迭代的版本控制架构
  • nohup、tmux、pm2 全面解析
  • 两款免费神器,希望不要收费!
  • AI元人文构想:人机协作的“未来哪吒”架构
  • Qwen-Image:突破文本渲染与编辑的视觉生成模型
  • 四年累销600万,这就是“海洋速度”
  • Keras与TensorFlow-GPU配置避坑指南
  • Redis + ThinkPHP 实战学习手册(含秒杀场景)
  • 展锐平台:修复使用触控笔主动橡皮擦键功能时, InputDispatcher 发生了致命错误(F 级别),导致 system_server 进程崩溃并重启。