news 2026/4/3 6:32:47

Spring中Bean的生命周期

作者头像

张小明

前端开发工程师

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


文章目录

      • 1. **生产(Production)**
        • (1)定义 Bean(Bean Definition)
        • (2)创建 Bean(Bean Instantiation & Initialization)
        • (3)添加 Bean(Add to Container)
      • 2. **使用(Usage)**
      • 3. **销毁(Destruction)**

Spring Bean 生命周期= 生产 → 使用 → 销毁
生产阶段包括:Bean 定义、Bean 创建、Bean 注册
创建 bean包括:创建实例、添加属性、初始化实例、注册销毁

1.生产(Production)

目标:让 Bean 变成容器中一个可用的对象。

(1)定义 Bean(Bean Definition)
  • 含义:在 Spring 容器启动时,通过 XML、注解(如@Component)、Java Config(@Bean)等方式注册 Bean 的元数据
  • 技术体现:生成BeanDefinition对象,存入BeanFactoryBeanDefinitionMap
  • 注意:此时尚未创建实例,只是“蓝图”。

✅ 这一步确实属于“生产”的前置准备。


(2)创建 Bean(Bean Instantiation & Initialization)

这是核心阶段,Spring 内部称为“bean creation”,包括:

  • 创建实例(Instantiation)
    → 调用构造函数 / 工厂方法,生成原始对象。
  • 属性填充(Populate Properties)
    → 注入依赖(如@Autowired字段)。
  • 初始化(Initialization)
    → 执行@PostConstructInitializingBean.afterPropertiesSet()init-method等。
  • 注册销毁回调(Register Destruction Callback)
    → 如果是单例,容器会记录其销毁方法(用于关闭时调用)。

⚠️ 注意:“注册销毁”不是“执行销毁”,而是提前登记,属于“生产”阶段的收尾工作。


(3)添加 Bean(Add to Container)
  • 实际上,一旦 Bean 创建并初始化完成,Spring 就会将其放入单例池(singletonObjects)中(针对 singleton 作用域)。
  • 此后其他 Bean 就可以从容器中获取它。
  • 所以“添加”可理解为“将初始化完成的 Bean 缓存到容器中,供后续使用”

2.使用(Usage)

  • 应用代码通过@AutowiredgetBean()等方式获取并使用 Bean
  • 对于 singleton Bean,所有使用者共享同一个实例。
  • 对于 prototype Bean,每次获取都会走一遍“创建”流程(但不归还给容器,也不管理销毁)。

3.销毁(Destruction)

  • 仅适用于 singleton Bean(prototype 不由容器销毁)。
  • 当容器关闭(context.close()registerShutdownHook()触发)时:
    • 调用@PreDestroy
    • 调用DisposableBean.destroy()
    • 调用destroy-method
  • 容器内部会遍历disposableBeans集合,依次销毁。

🌟 面试推荐回答模板

Spring Bean 的生命周期可以分为生产、使用和销毁三个阶段。
其中生产阶段包括 Bean 的定义、创建和注册。
创建 Bean 时又会经历实例化、属性注入、初始化,并在初始化完成后注册销毁回调。
随后 Bean 进入使用阶段,被容器管理和依赖。
容器关闭时进入销毁阶段,执行相应的销毁方法。

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

多轮对话管理:保持话题连贯性的技术实现

多轮对话管理:保持话题连贯性的技术实现 在智能客服、企业知识库和私有文档助手日益普及的今天,用户不再满足于“问一句答一句”的机械交互。他们期望AI能像人类同事一样记住上下文——当追问“那第三条怎么改?”时,系统应当明白“…

作者头像 李华
网站建设 2026/3/31 11:14:13

支持增量更新吗?动态添加文档的最佳方式

支持增量更新吗?动态添加文档的最佳方式 在智能问答系统日益普及的今天,一个现实问题摆在每个企业与个人用户面前:当新文档不断产生时,如何让AI助手“立刻知道”这些新知识,而不是等待漫长的重新训练或全量重建&#x…

作者头像 李华
网站建设 2026/4/2 13:47:19

使用分区表的请一定注意这个问题

在Oracle数据库中,分区表(Partitioned Tables)是处理大规模数据的利器,通过将表数据按键值(如日期、范围)分成逻辑分区,提高查询效率和管理灵活性。然而,当涉及drop或truncate分区操…

作者头像 李华
网站建设 2026/3/31 4:19:30

P1478 陶陶摘苹果(升级版)题解

#include<iostream> #include<vector> #include<algorithm>// 定义结构体xy&#xff0c;表示苹果的属性 // x: 苹果的高度 // y: 摘取苹果需要的力量/花费 struct xy {int x, y; };// 比较函数&#xff0c;用于排序 // 按照苹果的花费y从小到大排序 // 这样排…

作者头像 李华
网站建设 2026/3/23 18:33:29

YOLOv11 改进 - 注意力机制 | IIA信息整合注意力(Information Integration Attention ):精准保留空间位置信息,平衡精度与计算成本 | TGRS2025

前言 本文提出信息整合注意力(IIA)机制,并将其集成到YOLOv11中用于遥感图像语义分割。传统CNN难捕捉全局信息,Transformer计算复杂,现有基于Mamba的方法未充分考虑局部信息。IIA利用图像特征空间位置不变性,先融合编解码器特征,再从高度和宽度方向提取序列信息,生成注…

作者头像 李华
网站建设 2026/3/13 13:17:46

基于异或门的同步脉冲生成技术:操作指南

用一个异或门&#xff0c;让系统“秒懂”关键时机&#xff1a;同步脉冲生成的极简智慧你有没有遇到过这种情况——明明信号已经来了&#xff0c;下游电路却像没听见一样&#xff1f;或者&#xff0c;你想在某个时钟边沿精确触发一次动作&#xff0c;结果因为延迟不稳、毛刺干扰…

作者头像 李华