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

Bean 什么时候会被销毁?

文章目录

    • 1. 核心触发时机:容器关闭
    • 2. 不同作用域(Scope)的差异
    • 3. 销毁逻辑的具体执行顺序

Bean 的销毁时机主要取决于它的作用域(Scope)以及容器(ApplicationContext)的状态

在 Spring 中,Bean 的销毁过程遵循严格的生命周期管理。以下是具体的触发条件和执行逻辑:


1. 核心触发时机:容器关闭

对于最常见的Singleton(单例)Bean,其生命周期与 Spring 容器同步。

  • 触发动作:当调用ConfigurableApplicationContext.close()方法,或者 JVM 接收到关闭信号(通过注册的Shutdown Hook)时。
  • 执行过程:容器在关闭前,会找出所有实现了销毁接口或定义了销毁方法的单例 Bean,并逐一执行它们的销毁逻辑。

2. 不同作用域(Scope)的差异

不同作用域的 Bean,销毁时机完全不同:

作用域 (Scope)销毁时机说明
Singleton容器关闭时在容器整个生命周期内只创建一次,随容器一起“寿终正寝”。
PrototypeSpring 不负责销毁关键点:Spring 只负责创建并初始化多例 Bean,一旦交给客户端,容器就不再维护它的引用。销毁工作必须由开发者手动完成(如通过垃圾回收或手动调用方法)。
RequestHTTP 请求结束时随当前 HTTP 请求的完成而销毁。
SessionHTTP Session 结束时当会话超时或被手动失效(Invalidate)时销毁。

3. 销毁逻辑的具体执行顺序

当销毁时机到达时,Spring 会按以下顺序调用你定义的销毁代码:

  1. @PreDestroy注解方法
    这是 JSR-250 标准注解,优先级最高。
@PreDestroypublicvoidcleanup(){System.out.println("1. 执行 @PreDestroy 方法,释放资源...");}
  1. DisposableBean接口的destroy()方法
    如果 Bean 实现了这个接口,Spring 会调用它。
publicclassMyBeanimplementsDisposableBean{@Overridepublicvoiddestroy(){System.out.println("2. 执行 DisposableBean.destroy()...");}}```3.**自定义的 `destroy-method`**: 在 `@Bean` 注解或XML中指定的销毁方法,优先级最低。 ```java// Java 配置方式@Bean(destroyMethod="customDestroy")publicMyBeanmyBean(){...}// 或者 XML 方式// <bean id="..." class="..." destroy-method="customDestroy" />```---##4.特殊情况:为什么我的销毁方法没执行? 如果你发现单例Bean的销毁方法没有被调用,通常是以下两个原因:***没有优雅关闭容器**:如果在非Web应用(如普通的 `main` 方法程序)中直接结束运行,没有调用 `context.close()`,JVM会直接杀掉进程,Spring来不及执行销毁逻辑。建议使用 `context.registerShutdownHook()`。***Prototype作用域**:如前所述,Spring根本不会去销毁Prototype类型的Bean**一句话总结:**对于单例,**容器关,Bean**;对于多例,**Spring管生不管死**。 关于Bean的生命周期,你是想进一步了解初始化阶段的具体顺序,还是在处理具体的资源释放(如数据库连接池、线程池)报错问题?
http://www.jsqmd.com/news/786345/

相关文章:

  • 如何创建一个 Springboot Starter
  • OpenClaw 用户如何快速配置 Taotoken 聚合端点实现多模型调用
  • 【2026最新版|收藏备用】用Skill简化大模型知识库连接,小白程序员入门必看
  • Dify工作流实战:构建HR与网络安全AI应用脚本库
  • 09-扩展知识——05. date 类 - 处理日期
  • 基于Kubernetes的AI应用控制平面:kiro-acp架构解析与实践指南
  • Bean 会被 JVM 回收吗?
  • Animal-AI环境:连接强化学习与认知科学的3D虚拟实验室
  • 网络安全工程师超详细职业规划!零基础从入门到精通全程路线,看这一篇就够了
  • 收藏!2026年转AI大模型应用开发,正确学习顺序别踩坑(小白/程序员必看)
  • Undertow高性能Web服务器:架构解析与Java微服务实战
  • 医学影像分割:2D超图像与3D网络性能对比与选型指南
  • AI编程助手本地化提速:钩子拦截模式实现零延迟命令执行
  • Clawd-Code:基于LLM与代码库构建智能开发Agent的开源框架
  • CANN/cann-learning-hub:算子Kernel直调编程
  • 收藏必看!2026年AI内卷混战风口拆解,小白也能轻松入局大模型
  • OpenClaw本地AI智能体部署指南:从Docker到多平台实战
  • SSD主控架构到工业存储落地:天硕自研主控技术路径参照
  • 2026年国内GEO公司综合实力前五强榜单推荐:主流头部GEO服务商实力全解析 - GEO优化
  • 2026 年广州 GEO 服务商综合实力五强榜单与实战选型指南 - GEO优化
  • 容器是怎么管理 Bean 的?
  • 2026年近期大庆企业如何选择专业可靠的短视频服务伙伴? - 2026年企业推荐榜
  • 云原生性能测试平台OpenClaw Cloud:架构解析与实战部署指南
  • 第四篇:RDB与AOF持久化——宕机后数据怎么恢复?
  • 2026年最新趋势:西安外贸企业如何选择建站服务商突围海外市场? - 2026年企业推荐榜
  • 认知科学视角下的AGI评测:超越传统基准的多维能力评估框架
  • AI工作流引擎:构建可观测、可扩展的AI应用开发框架
  • 抖音直播录制神器:40+平台自动值守,永久保存精彩瞬间
  • 通用人工智能系统(GPAIS)的技术挑战与可信AI治理框架
  • AutoKG:大语言模型与远程监督驱动的自动化知识图谱构建实战