当前位置: 首页 > news >正文

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 注解的方法(推荐)
http://www.cnnetsun.cn/news/87848.html

相关文章:

  • 大模型学习全攻略:七阶段系统学习路线图,从基础到实战应用,非常详细收藏我这一篇就够了
  • 玄晶引擎AI数字员工更新深度测评:Sora2赋能+RPA运营,AI内容生产进入效率革命期
  • YOLOv5中使用torch加载自定义模型进行目标检测
  • LobeChat能否隐藏源码信息?增强系统隐蔽性
  • React 的桶算法详解
  • 深入理解Dify的依赖管理机制(Dependency Walker适用场景)
  • CordovaOpenHarmony车辆管理系统开发
  • YOLO训练中断恢复技巧:避免重复计算
  • 电气自动化专业相关认证解析
  • 手机内存告急?MAZANOKE 压缩照片不损画质,加载cpolar远程用更方便
  • 「直通」英伟达,蓝思科技补齐AI算力布局又一块拼图
  • Dify + Jenkins 实现AI应用持续集成与自动化部署
  • MTS AI智能聚合公链正式上线
  • LobeChat能否生成SQL语句?数据库查询助手上线
  • 告别深夜批改:用Qwen3-VL大模型打造会“理解”的作文阅卷助手
  • LobeChat语音输入功能实测:让AI对话更自然流畅
  • 基于PaddlePaddle的视觉模型训练实战:从Docker安装到GPU算力调用
  • LobeChat能否实现多轮对话优化?上下文理解增强策略
  • 如何在Windows和Linux上完成TensorRT安装包的部署
  • Dify在边缘计算场景下部署的可行性评估
  • LobeChat能否对接Airtable?轻量级数据库联动方案
  • LobeChat能否实现AI故事续写?创意写作激发灵感
  • AI知识科普丨什么是 ModelOps?
  • Windows 10下Anaconda安装OpenCV指南
  • LangChain与AutoGPT核心差异与应用场景解析
  • 文件上传靶场的3种白名单,3种黑名单,以及3种针对文件内容的修改。特性靶场、get,post传参方式区别(抓包看看),正则匹配,以及高亮函数作用
  • ENSP下载官网打不开?这份备用清单请收好
  • 解决langchain-chatchat因缺少__init__.py导致的模块调用错误
  • 15秒写歌?AI音乐模型ACE-Step实测体验
  • 谁还能不知道计算机组成结构与缓存