SpringBean生命周期之PostConstruct、PreDestroy详解

在Spring框架中,Bean的生命周期是一个复杂的过程,涉及多个阶段,其中@PostConstruct@PreDestroy注解在Bean的初始化和销毁阶段发挥着重要作用。以下是对这两个注解的深入理解:

一、@PostConstruct注解

  1. 定义与来源

    • @PostConstruct源自Java EE包javax.annotation,是一个标准的注解。
    • 它用于标记一个方法,该方法将在Bean初始化完成后被执行。
  2. 特点

    • 只有一个非静态方法能使用此注解。
    • 被注解的方法不得有任何参数。
    • 被注解的方法返回值必须为void。
    • 被注解方法不得抛出已检查异常。
    • 此方法只会被执行一次。
  3. 作用

    • 完成依赖注入后,执行一些需要依赖注入的操作。在构造方法执行完毕后,自动调用被@PostConstruct注解修饰的方法,可以保证对象的依赖已经被注入,可以安全地执行一些需要依赖的操作。
    • 初始化一些资源。@PostConstruct注解修饰的方法可以用于初始化一些需要在对象创建后立即准备好的资源,例如数据库连接、网络连接等。
    • 执行一些必要的校验操作。在对象创建后,可以使用@PostConstruct注解修饰的方法进行一些必要的校验操作,例如检查配置是否正确、检查依赖是否满足等。
  4. 执行时机

    • 在Bean生命周期内,@PostConstruct在设置Bean属性并应用所有Bean后处理器之后调用方法。
    • 如果Bean也实现了InitializingBean接口,则其afterPropertiesSet方法将在带注解的方法之前调用。
  5. 使用案例

    • 在项目启动时需要加载某个方法时,可以使用@Component@PostConstruct组合将一个方法完成初始化操作。
    • 使用@PostConstruct注解的方法可以在Bean初始化阶段完成数据预热,比Redis更早。

如系统配置信息、数据字典数据:

二、@PreDestroy注解

  1. 定义与来源

    • @PreDestroy同样源自Java EE包javax.annotation,是一个标准的注解。
    • 它用于标记一个方法,该方法将在其所属的对象被销毁之前执行。
  2. 特点

    • @PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次。
  3. 作用

    • 通常情况下,@PreDestroy用于标记在对象生命周期结束时需要执行的清理操作,比如释放资源、关闭连接等。
  4. 执行时机

    • 在Bean生命周期内,用@PreDestroy注释的方法会在Bean不再可用之后、正式从容器中删除之前执行。
    • 如果Bean也实现了DisposableBean接口,则destroy方法将在带注解的方法之后执行。
  5. 使用案例

    • 当Bean实例被销毁时,会执行被@PreDestroy注解标记的方法,释放资源或执行其他清理操作。

三、总结

  • @PostConstruct@PreDestroy注解是Spring框架中用于管理Bean生命周期的重要工具。
  • @PostConstruct在Bean初始化完成后执行,用于完成依赖注入后的操作、初始化资源和执行校验等。
  • @PreDestroy在Bean销毁前执行,用于释放资源和执行清理操作。
  • 了解这两个注解的使用和执行时机,有助于更好地管理Spring Bean的生命周期,确保应用程序的稳定性和资源的有效利用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于阿里云Ubuntu22.04 64位服务器Java及MySql环境配置命令记录

基于阿里云Ubuntu22.04 64位服务器Java及MySql环境配置命令记录 Java 23 离线环境配置MySql 环境配置MySQL常用命令 Java 23 离线环境配置 下载 Ubuntu环境下 Java 23 离线包 链接: java Downloads. 在Linux环境下创建一个安装目录 mkdir -p /usr/local/java将下载好的jdk压缩…

逆向分析:利用标志位进行爆破破解

信息收集 查程序编写信息 所用工具Detect It Easy Delphi编写,根据此信息选择DeDeDark进行反编译进一步收集可用信息 反编译程序进行信息收集 所用工具DeDeDark 载入要分析的主程序点击[开始处理]进行分析 注:主程序即软件主题程序(长见软件安装完毕…

【工具变量】上市公司企业研发不确定性数据(2013-2023年)

一、测算方式:参考顶刊《中国工业经济》孙薇(2023)老师的做法,本文从专利的申请与授权的视角出发,以企业当年申请的发明专利中最终未被授权的比例度量研发不确定性 (uc)。这是因为,相…

centos部署SkyWalking并在springcloud项目中用法举例

文章目录 场景SkyWalking介绍部署部署Storage [单机版Elasticsearch]部署SkyWalking OAP [下载地址](https://skywalking.apache.org/downloads/#SkyWalkingAPM)部署SkyWalking Java AgentspringCloud 使用举例 场景 SkyWalking是应用性能监控平台,可用于分布式系统…

[ACL 2024] ReFT: Reasoning with REinforced Fine-Tuning

Contents IntroductionMethodExperimentsReferences Introduction 作者提出 Reinforced Fine-Tuning (ReFT) 进行在线强化学习,帮助模型输出正确的推理步骤,总体感觉在线学习的思路和 STaR 非常相似,就是把 SFT 换成了 PPO… Method Warm-…

深度优先的艺术:探索二叉树的深搜算法精髓

文章目录 前言☀️一、计算布尔二叉树的值🌙解法⭐代码 ☀️二、求根节点到叶节点数字之和🌙解法⭐代码 ☀️三、二叉树剪枝🌙解法⭐代码 ☀️四、验证二叉搜索树🌙解法☁️步骤⭐代码 ☀️五、二叉搜索树中第k小的元素&#x1f3…

python学opencv|读取图像(五)读取灰度图像像素

【1】引言 前序学习了图像的基本读取,掌握了imread()、imshow()和imwrite()函数的基本功能和使用技巧,参考文章链接为: python学opencv|读取图像-CSDN博客 然后陆续掌握了彩色图像保存、图像放大和缩小以及对imshow()函数的大胆尝试技巧&a…

基于yolov8的SAR影像目标检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测、图像分类识别、目标追踪等项目可看我主页其他文章 功能演示: 基于yolov8的SAR影像目标检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili (一)简介 基于yolov8的SAR影像目标…

ESP32开发 云调试

https://blog.csdn.net/weixin_43794311/article/details/128722001 VScode支持的仿真平台 https://docs.wokwi.com/zh-CN/vscode/getting-started 编译:Ctrl Alt B上传并重启模拟器:CtrlShifB Wokwi:Start Simulator调试:CtrlShifB Wokwi…

模版方法模式的理解和实践

在软件开发中,设计模式为我们提供了一套经过验证的解决方案,用于解决常见的设计问题。其中,模版方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的框架,并允许子类在不改…

MySQL--》如何在SQL中巧妙运用函数与约束,优化数据处理与验证?

目录 函数使用 字符串函数 数值函数 日期函数 流程函数 约束 函数使用 函数是指一段可以直接被另一段程序调用的程序或代码,在mysql当中有许多常见的内置函数,接下来开始对这些内置函数及其作用进行简单的讲解和使用: 字符串函数 my…

归有光,情感与真实的独行者

归有光,字熙甫,号震川,生于明孝宗弘治十年(公元1507年),卒于明穆宗隆庆五年(公元1571年),享年64岁。他是中国明代著名的散文家、文学家和史学家,其散文风格清…

计算机网络-Wireshark探索ARP

使用工具 Wiresharkarp: To inspect and clear the cache used by the ARP protocol on your computer.curl(MacOS)ifconfig(MacOS or Linux): to inspect the state of your computer’s network interface.route/netstat: To inspect the routes used by your computer.Brows…

Vue3小兔鲜电商项目

创建项目 npm install 装包

美畅物联丨视频接入网关如何配置 HTTPS 证书

在安防领域,视频接入网关(Video Access Gateway,VAG)是视频监控系统的重要组成部分,其职责是把视频数据从前端设备传输至后端服务器。配置HTTPS证书后,可对视频流进行加密传输,避免数据在网络传…

fastcam编程套料软件

Fastcam是一款功能强大的专业软件,以下是对它的具体介绍: 基本信息 • Fastcam自1982年推出首个交互式CNC编程和套料系统后,一直不断更新发展. • 它是为数控火焰、等离子、激光和水射流切割机等数控切割机开发的编程套料软件. 主要功能模…

【大语言模型】LangChain ModelsIO与Models I/O Promopts详解

【大语言模型】LangChain ModelsIO与Prompts详解 一、LangChain ModelsIO1、简介2、Models I/O 的应用场景3、Models I/O 主要模块3.1、Prompts3.2、Modelsa、MESSAGES 类型 3.3、Output Parsers 二、LangChain ModelsIO Prompts1、简介2、Prompts 的优点3、实战示例3.1、Promp…

MicroBlaze软核开发(三):DDR + FLASH

实现功能:使用 MicroBlaze软核,配置 DDR、Flash 接口,并将程序烧写固化到Flash,每次启动 FPGA 时自动运行 Flash 中的程序 。 Vivado版本:2018.3 FPGA:Xilinx Artix-7 系 目录 引言 Vivado部分&#xff1…

11.23[大数据]

PRO1:LSTM模型预测输出都是同一个值? 画出来的图像就是一条横线 这个搜了搜,原因可能有很多,但感觉最主要的原因极可能是激活函数选择不当,以及层的搭建不合适 原模型是 REF https://zhuanlan.zhihu.com/p/654325094 https:/…

基于SpringBoot+Vue的新闻管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展,信息传播速度不断加快,新闻媒体行业面临着巨大的机遇与挑战。传统的新闻媒体正在逐渐向数字化转型,而新闻管理系统作为数字化新闻媒体的核心组成部分,其…