news 2026/5/23 9:19:37

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/5/23 1:25:28

Vivado2025逻辑综合优化技巧:时序收敛操作指南

Vivado 2025逻辑综合优化实战:从时序违例到一次收敛的进阶之路 你有没有遇到过这样的场景?RTL代码刚写完,信心满满地跑综合,结果打开 timing_summary 一看——建立时间违例-0.8ns。明明仿真波形完美,功能也没问题&am…

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

CSS 定位

一、相对定位 二、绝对定位 三、固定定位 四、粘性定位 五、定位层级

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

为客服系统赋能:接入anything-llm实现自动应答

为客服系统赋能:接入 AnythingLLM 实现自动应答 在企业服务的日常运转中,客服部门常常面临这样的窘境:一边是客户对“秒回”的期待越来越高,另一边却是人工坐席被重复性问题淹没,培训成本居高不下,回答口径…

作者头像 李华
网站建设 2026/5/20 7:00:21

VMD-Transformer-GRU组合模型锂电池剩余寿命预测(NASA电池数据集容量特征提取+RUL电池剩余寿命预测)MATLAB代码

代码功能 1. rongliangtiqu.m - 电池容量数据提取 主要功能: 从NASA电池数据集中提取放电容量数据并进行可视化分析 算法步骤: 导入四个电池数据集(B0005, B0006, B0007, B0018)遍历每个电池的循环数据,筛选放电循环提取放电容量数据并存…

作者头像 李华
网站建设 2026/5/16 11:03:01

wl_arm在过程控制中的典型架构:图解说明

从传感器到云端:一文讲透 wl_arm 在现代过程控制中的实战架构你有没有遇到过这样的场景?产线上的传统 PLC 看似稳定,但一旦要接入云平台、跑个预测性维护算法,或者扩展几十路模拟量输入时,立刻变得力不从心——通信慢、…

作者头像 李华
网站建设 2026/5/16 9:24:24

9 个降AI率工具,本科生高效降重指南

9 个降AI率工具,本科生高效降重指南 AI降重工具:高效降低AIGC率的得力助手 在当前学术写作中,越来越多的本科生开始使用AI工具辅助论文撰写。然而,随着各大高校对AI生成内容(AIGC)检测的重视,如…

作者头像 李华