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,无需手动调用。
相关推荐
wheeldown7 分钟前
【Linux】Linux 地址空间 + 页表映射的概念解析
java·linux·jvm
源码宝12 分钟前
一套随访系统源码,医院随访管理系统源码,三级随访平台源码,技术框架:Java+Spring boot,Vue,Ant-Design+MySQL5
java·源码·软件开发·程序·随访·随访系统源码·三级随访
♡喜欢做梦13 分钟前
Spring IOC
java·后端·spring
2301_7965125215 分钟前
Rust编程学习 - 问号运算符会return一个Result 类型,但是如何使用main函数中使用问号运算符
开发语言·学习·算法·rust
座山雕~21 分钟前
测试接口-----详细
开发语言·postman
拾忆,想起27 分钟前
TCP滑动窗口:网络世界的“智能流量阀门”
java·网络·数据库·网络协议·tcp/ip·php·哈希算法
小龙报31 分钟前
算法通关指南:数据结构和算法篇 --- 队列相关算法题》--- 1. 【模板】队列,2. 机器翻译
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
摇滚侠31 分钟前
Spring Boot3零基础教程,Reactive-Stream 发布订阅写法,笔记104 笔记105
java·spring boot·笔记
木木em哈哈38 分钟前
有关于cnb自动化的脚本补全
服务器·开发语言·pygame
星释39 分钟前
Rust 练习册 :Poker与扑克牌游戏
开发语言·游戏·rust