SSM框架——Day4

Bean的生命周期

Bean的生命周期指的是从创建到销毁的整个过程,通常由Spring IoC容器管理。以下是Bean生命周期的关键阶段:

实例化:容器通过构造器或工厂方法创建Bean的实例。此时对象尚未初始化,属性未注入。
属性赋值:

容器根据配置(如XML、注解)为Bean注入依赖项,包括基本类型、集合、引用其他Bean等。

初始化前处理

若Bean实现接口,容器会调用对应方法(如setBeanName())传递相关信息。

自定义初始化

调用InitializingBean接口的afterPropertiesSet()方法,或执行通过@PostConstruct注解或XML配置的init-method指定的方法。

Bean可用

完成初始化后,Bean进入可用状态,可被其他对象依赖或通过容器获取。

销毁前处理

容器关闭时,若Bean实现DisposableBean接口,会调用destroy()方法,或执行通过@PreDestroy注解或XML配置的destroy-method指定的方法。

生命周期扩展点

开发者可通过以下方式干预生命周期:

  • Aware接口 :如ApplicationContextAware可获取Spring上下文。
  • BeanPostProcessor:在初始化前后插入自定义逻辑,适用于所有Bean。
  • InstantiationAwareBeanPostProcessor:在实例化前后介入,影响Bean创建。

ctx.registerShutdownHook() 和 ctx.close() 的区别

在 Spring 应用生命周期管理中,registerShutdownHook()close() 都是用于关闭应用上下文的方法,但它们的触发时机和用途存在差异。

registerShutdownHook()
  • 注册一个 JVM 关闭钩子(Shutdown Hook),在 JVM 即将关闭时自动调用 close() 方法清理资源。
  • 适用于需要优雅关闭的场景(如释放数据库连接、停止后台线程等)。
  • 通常在主程序启动时调用,确保应用退出时触发清理逻辑。
close()
  • 直接手动关闭应用上下文,立即释放资源。
  • 适用于需要显式控制关闭时机的场景(如测试用例结束后)。
  • 调用后上下文无法再次使用,需重新创建。

registerShutdownHook()位置可以换,放在哪儿都优雅的执行,close()放在前面会即刻关闭,后面其他内容不再执行,但是会执行destory()。

关键差异
  1. 触发方式

    • registerShutdownHook() 依赖 JVM 关闭信号(如 Ctrl+Ckill 命令)。
    • close() 需显式调用,不依赖外部事件。
  2. 执行时机

    • Shutdown Hook 在 JVM 退出前异步执行。
    • close() 同步执行且立即生效。
  3. 典型用途

    • 生产环境推荐使用 registerShutdownHook() 确保资源清理。
    • 测试或脚本中可手动调用 close() 精确控制生命周期。
注意事项
  • 两者均会触发 @PreDestroy 方法和 DisposableBean 接口的实现。
  • 避免重复调用 close(),可能导致异常。
  • Spring Boot 的 SpringApplication 默认会注册 Shutdown Hook,无需手动调用。
相关推荐
Hello.Reader几秒前
Go-Redis 入门与实践从连接到可观测,一站式掌握 go-redis v9**
开发语言·redis·golang
编程小白gogogo8 分钟前
Student后台管理系统查询接口
java·spring·mybatis
007php00710 分钟前
使用LNMP一键安装包安装PHP、Nginx、Redis、Swoole、OPcache
java·开发语言·redis·python·nginx·php·swoole
枯萎穿心攻击17 分钟前
响应式编程入门教程第五节:Unity 生命周期与资源管理中的响应式编程
开发语言·unity·架构·c#·游戏引擎
Mr_Xuhhh22 分钟前
Qt窗口(2)-工具栏
java·c语言·开发语言·数据库·c++·qt·算法
艾莉丝努力练剑1 小时前
【数据结构与算法】数据结构初阶:详解顺序表和链表(五)——双向链表
c语言·开发语言·数据结构·学习·算法
算法_小学生1 小时前
Hinge Loss(铰链损失函数)详解:SVM 中的关键损失函数
开发语言·人工智能·python·算法·机器学习·支持向量机
续亮~1 小时前
基于Spring AI Alibaba的智能知识助手系统:从零到一的RAG实战开发
java·人工智能·spring·springaialibaba
giao源1 小时前
Spring Boot 整合 Shiro 实现单用户与多用户认证授权指南
java·spring boot·后端·安全性测试
YUJIANYUE1 小时前
纯前端html实现图片坐标与尺寸(XY坐标及宽高)获取
开发语言·前端·javascript