news 2026/7/22 0:58:38

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/7/15 0:04:52

基于Verilog的组合逻辑电路建模:语法与规范

从零构建可靠的组合逻辑:Verilog建模实战精要你有没有遇到过这样的情况?仿真时一切正常,波形完美,结果正确——可一进综合工具,就冒出一堆“latch inference”的警告。更糟的是,FPGA跑起来后某些输入组合下…

作者头像 李华
网站建设 2026/7/15 0:01:26

零基础理解蜂鸣器电路原理图:通俗解释核心组成

从“滴”一声开始:拆解蜂鸣器背后的电路逻辑你有没有想过,按下微波炉按钮时那声清脆的“滴”,是怎么来的?或者,智能门锁识别失败时那一声短促的“哔——”,背后究竟发生了什么电子魔法?其实&…

作者头像 李华
网站建设 2026/7/17 9:44:17

Xilinx Ultrascale+中实现XDMA双工通信的从零实现

从零构建XDMA双工通信:在Xilinx Ultrascale上打通高速PCIe数据通路 你有没有遇到过这样的场景?FPGA采集了海量图像或雷达回波数据,却卡在“怎么快速传给主机”这一关。传统的USB、千兆以太网早已力不从心,而CPU轮询搬运又占资源、…

作者头像 李华
网站建设 2026/7/17 12:09:29

DAY 48随机函数与广播机制

一、 随机张量的生成 在深度学习中经常需要随机生成一些张量,比如权重的初始化,或者计算输入纬度经过模块后输出的维度,都可以用一个随机函数来实现需要的张量格式,而无需像之前一样必须加载一张真实的图片。 随机函数的种类很多…

作者头像 李华
网站建设 2026/7/19 14:30:29

Windows 11下Multisim安装操作指南

如何在 Windows 11 上顺利安装 Multisim?一份来自实战的避坑指南 最近帮实验室几位同学装 Multisim,发现很多人卡在第一步—— 系统明明是 Win11,配置也不低,怎么点一下 setup.exe 就报错、卡死甚至直接退出? 别急。…

作者头像 李华
网站建设 2026/7/17 21:05:21

无源蜂鸣器驱动设计入门必看:基础原理与电路连接

无源蜂鸣器驱动设计实战指南:从原理到代码,彻底搞懂“嘀”一声背后的秘密你有没有遇到过这种情况:明明代码烧录成功、接线也检查了三遍,可一上电——蜂鸣器就是不响?或者声音微弱得像蚊子叫,甚至MCU莫名其妙…

作者头像 李华