news 2026/6/23 19:10:07

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一文讲清楚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步即可,够用

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 7:48:43

【Dify与Spring AI兼容性深度解析】:掌握版本匹配的5大核心原则

第一章:Dify 与 Spring AI 的版本兼容性概述在构建现代化 AI 驱动的应用程序时,Dify 与 Spring AI 的集成成为关键环节。确保两者版本之间的兼容性,是系统稳定运行的基础前提。不同版本的 Dify 和 Spring AI 可能在 API 接口、数据格式以及认…

作者头像 李华
网站建设 2026/6/23 7:20:57

LobeChat能否支持引力波探测?宇宙事件捕捉与信号解读

LobeChat能否支持引力波探测?宇宙事件捕捉与信号解读 在人类探索宇宙的征途中,2015年LIGO首次直接探测到引力波的消息震惊世界——我们终于“听”到了时空本身的震颤。自那以后,双黑洞并合、中子星碰撞等极端天体事件不再是理论推演中的符号&…

作者头像 李华
网站建设 2026/6/22 20:06:04

基于Next.js的LobeChat为何成为开发者新宠?

基于Next.js的LobeChat为何成为开发者新宠? 在大语言模型(LLM)席卷全球的浪潮中,一个耐人寻味的现象正在发生:越来越多的开发者不再满足于“调用API写个前端”的简单拼接,而是开始追求更完整、更优雅的AI交…

作者头像 李华
网站建设 2026/6/23 12:26:19

LobeChat压力测试报告:每秒可承受多少并发请求?

LobeChat压力测试报告:每秒可承受多少并发请求? 在AI助手从“能用”走向“好用”的今天,一个看似简单的问题却成了决定用户体验的关键——当几十甚至上百人同时提问时,你的聊天界面还能流畅响应吗?这不是实验室里的理论…

作者头像 李华
网站建设 2026/6/22 20:48:02

LobeChat能否对接IFTTT?事件驱动型AI助手构建

LobeChat能否对接IFTTT?事件驱动型AI助手构建 在智能家居设备日益复杂的今天,确保无线连接的稳定性已成为一大设计挑战。然而,类似的集成难题不仅存在于硬件领域——当我们试图将AI能力真正嵌入日常生活时,也会遇到“如何让AI主动…

作者头像 李华
网站建设 2026/6/23 17:00:06

10 个降AI率工具,研究生高效避坑指南

10 个降AI率工具,研究生高效避坑指南 AI降重工具:论文写作的得力助手 在研究生阶段,论文写作不仅是学术能力的体现,更是对个人研究深度和表达能力的全面考验。然而,随着AI技术的广泛应用,越来越多的学生发现…

作者头像 李华