news 2026/5/1 8:05:20

Spring Bean 的生命周期详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Bean 的生命周期详解

Spring Bean 的生命周期是指从 Bean 被 Spring 容器创建、初始化、使用到销毁的整个过程。理解这一过程,能帮助你精准控制 Bean 的行为(如自定义初始化逻辑、资源释放),也是解决 Spring 容器相关问题的核心基础。

Spring Bean 的生命周期可分为核心流程扩展流程,核心流程由 Spring 容器的核心容器(BeanFactory/ApplicationContext)主导,扩展流程则通过 Spring 提供的各种接口和注解实现自定义控制。

一、Spring Bean 生命周期的核心阶段(整体概览)

ApplicationContext 容器(最常用的 Spring 容器,如 AnnotationConfigApplicationContext、ClassPathXmlApplicationContext)为例,Bean 的生命周期可概括为 8 个核心阶段,再加上扩展接口的增强,整体流程如下:

plaintext

1. 实例化(Instantiation)→ 2. 属性赋值(Populate)→ 3. 初始化前(PostProcessBeforeInitialization)→ 4. 初始化(Initialization)→ 5. 初始化后(PostProcessAfterInitialization)→ 6. 就绪(Ready)→ 7. 销毁前(PreDestroy)→ 8. 销毁(Destroy)

下面将逐阶段拆解,并结合关键接口、注解代码示例详细说明。

二、各阶段详细解析(附代码实战)

1. 实例化(Instantiation)

  • 作用:创建 Bean 的实例对象(相当于调用 new 关键字)。
  • 底层逻辑:Spring 容器通过反射调用 Bean 的构造方法(无参构造优先,若有参构造需通过 @Autowired 或 XML 配置指定依赖)创建实例。
  • 注意:此时 Bean 仅为 “空对象”,属性(如依赖的其他 Bean)尚未赋值。

2. 属性赋值(Populate Properties)

  • 作用:为 Bean 的属性赋值(包括注入依赖的其他 Bean、基本类型属性等)。
  • 实现方式
    • 自动注入:通过 @Autowired@Resource 等注解实现依赖注入;
    • XML 配置:通过 <property> 标签指定属性值;
    • 注解配置:通过 @Value 注入配置文件中的属性。
  • 关键:这一阶段完成后,Bean 的所有依赖关系已被注入,属性值已初始化。

3. 初始化前(BeanPostProcessor 的 postProcessBeforeInitialization)

  • 作用全局前置处理,对所有 Bean 进行初始化前的统一增强(如修改属性值、添加代理等)。
  • 核心接口BeanPostProcessor(Bean 后置处理器)的 postProcessBeforeInitialization 方法。
    • 该接口是 Spring 提供的核心扩展点,所有实现类会被 Spring 容器自动识别,作用于容器内所有 Bean。
    • 返回值:可返回修改后的 Bean 实例(如代理对象),若返回 null 则当前 Bean 会被忽略。

4. 初始化(Initialization)

这是 Bean 生命周期中自定义逻辑的核心阶段,Spring 提供了多种方式实现初始化逻辑,执行顺序为:

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

AI不会淘汰产品经理,但不会AI的会!大模型学习指南(建议收藏)

文章强调AI时代已全面到来&#xff0c;产品经理必须拥抱AI避免被淘汰。作者建议向取得实际成果的人学习AI知识&#xff0c;而非纯理论。特别推荐参加人人都是产品经理大会&#xff0c;邀请了腾讯音乐、金山办公、字节跳动等有AI落地经验的产品经理分享实战经验。我不想给你们罗…

作者头像 李华
网站建设 2026/5/1 4:44:01

智能双卡设计:SIM卡硬件架构与软件配置核心解析!

智能双卡设计的核心在于硬件架构的合理性与软件配置的适配性。本文首先剖析硬件层面的双卡卡槽布局、电源域划分及信号隔离设计要点&#xff0c;再深入解析软件配置中的驱动适配、卡状态机管理与运营商优先级设置逻辑&#xff0c;通过软硬件协同视角&#xff0c;为开发者提供智…

作者头像 李华
网站建设 2026/5/1 4:46:09

无需API限制!使用LobeChat调用自有模型节省token成本

无需API限制&#xff01;使用LobeChat调用自有模型节省token成本 在AI应用日益普及的今天&#xff0c;越来越多企业与开发者开始面临一个现实问题&#xff1a;明明只是想做个智能问答助手&#xff0c;为什么每次对话都要花几毛钱&#xff1f;当你的客服系统每天处理上千次请求…

作者头像 李华
网站建设 2026/5/1 4:45:44

Linly-Talker:构建可交互的数字人对话系统

Linly-Talker&#xff1a;构建可交互的数字人对话系统 在智能客服逐渐取代机械应答、虚拟主播开始挑战真人出镜的时代&#xff0c;我们正站在一场人机交互范式的转折点上。过去需要影视级制作流程才能实现的“会说话的数字面孔”&#xff0c;如今只需一张照片和一段语音&#…

作者头像 李华
网站建设 2026/5/1 5:45:05

分享150V耐压 输出电流可达3A的浮地架构DC-DC芯片

一、概述OC5810是一款支持宽电压输入的开关降压型DC-DC&#xff0c;内置 150V/100mΩ 功率MOS&#xff0c;最高输入电压150V。 OC5810具有低待机功耗、高效率、低纹波、优异的母线电压调整率和负载调整率等特性。 支持大电流输出&#xff0c;输出电流可达 3A 以上。 OC5810同时…

作者头像 李华
网站建设 2026/5/1 6:50:49

kotaemon本地化数据处理与隐私保护方案

Kotaemon 本地化数据处理与隐私保护方案 在企业越来越依赖人工智能进行内部决策、客户服务和知识管理的今天&#xff0c;一个尖锐的问题摆在面前&#xff1a;我们能否既享受大模型带来的智能便利&#xff0c;又不让敏感信息暴露在第三方云端&#xff1f;尤其是在金融、医疗、法…

作者头像 李华