SpringBoot-事件监听机制

news/2025/3/15 17:32:03/文章来源:https://www.cnblogs.com/hld123/p/18343607

SpringBoot-事件监听机制

   本文参考的SpringBoot版本是2.6.13

   一、Spring Boot 启动事件顺序

  事件执行顺序:  

  1.  ApplicationStartingEvent             spring boot最开始启动时触发,SpringApplication.run() 之前发送。

  2. ApplicationEnvironmentPreparedEvent     spring boot环境已经准备好,但上下文还没有创建时触发。 

  3. ApplicationContextInitializedEvent                 spring boot 上下文准备好但尚未刷新时,bean的定义被加载之前发送

  4. ApplicationPreparedEvent          spring boot上下文context创建完成,但此时spring中的bean是没有完全加载完成的。

  5. ApplicationStartedEvent            spring boot开始启动时触发,可以在SpringApplication启动之前做一些手脚。

  6. ApplicationReadyEvent            spring boot上下文已经准备完毕的时候触发。

  7. ApplicationFailedEvent             spring boot启动失败触发。

   二、自定义启动事件监听器

   既然我们知道了 Spring Boot 在启动过程中的各个事件,那么我们就可以在每个环节来处理一些我们想做的事情,只需要自定义一个监听器来监听某个事件就可以了。

   1. META_INF/spring.factories 文件

   目录:

   配置内容:

   org.springframework.boot.SpringApplicationRunListener=com.yp.listeners.MyApplicationRunListener

   三、监听器的执行时机

   执行时机有 6种情况: starting、environmentPrepared、contextPrepared、contextLoaded、started、running

 

   

   结合SpringBoot的启动过程,再来看看执行时机:

   四、SpringApplication 与 ApplicationContext 中的事件监听

   监听器会存在于两个地方,一个是 SpringApplication,一个是 ApplicationContext。

   程序刚启动的时候,比如执行到 starting 阶段的时候,我们要扩展一些功能,肯定不能在 ApplicationContext 上添加监听器,因为这个阶段,还没有ApplicationContext 这个对象。注册到 SpringApplication 上是最自然的选择。 

   两者的触发的机制是有一些不同的,注册到 SpringApplication 上的事件会通过 SpringApplicationRunListener 触发。而注册到 ApplicationContext 中的事件则由 ApplicationContext 中的事件广播器触发。但是并不是说这两类监听是无法转换的,Spring Boot 默认的 SpringApplicationRunListener 是EventPublishingRunListener。 

 

   参考链接:https://www.cnblogs.com/kukuxjx/p/17373029.html

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

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

相关文章

免费为您的网页创建在线客服,扣子(COZE) WEB SDK图文使用教程

🧙‍♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用。 📜 我的教程《AI应用开发系列教程之扣子(Coze)实战教程》上线了,完全免费学习。最近,扣子(COZE) 的 Web SDK 正式上线了。有同学问"Web SDK"如何使用?今天,斜杠君就带大家学习COZE 「Web SDK」的使…

Mysql的length函数,char_length函数与字符,字节的区别

在存储中,1个英文单词或1个英文字符为1个1字节,1个中文或1个中文字符为3个字节在Mysql5.0之前,VARCHAR(20)中的20表示20个字节,英文可以存储20个,但中文只能存储6个在Mysql5.0之后,varchar(20)中的20表示20个字符,不管中文还是英文都可以存储20个length()函数是查找字节…

技术的八荣八耻

1. 以接口兼容为荣,以接口裸奔为耻以接口兼容为荣,怎么理解呢?很多bug都是因为修改了对外旧接口,但是却不做兼容导致的。关键这个问题多数是比较严重的,可能直接导致系统发版失败的。新手程序员很容易犯这个错误。所以我们修改老接口的时候,一般要做好兼容。如果你的需求…

解决windows报错:该文件没有与之关联的应用来执行该操作

报错截图:解决方案 1、新建txt文件2、复制内容到txt文件 taskkill /f /im explorer.exe reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "C:\Windows\system32\imageres.dll,154" /t reg_sz /f …

tomcat10 springboot项目部署成功但springboot没有启动日志问题

问题描述项目在tomcat8可以启动成功,请求也可以正常处理,在tomcat10上只有部署成功信息比如: deployWAR Deployment of web application archive [/data1/WWW/webapps/XXX.war] has finished in [127] ms, 但是没有springboot启动的信息。 该问题 不属于springboot打包为war包…

Centos7 安装 Imc

centos 7 安装 imc 注意:安装的时候必须选择图形化安装。即安装系统的时候,“软件选择”那块选择“带 GUI 的服务器”。关闭 selinux 和 防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g&q…

USB协议基础篇

初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB。一,从最常见的名词说起 1.1 什么是USB 这个我就不多解释了,直译就是通用串行总线。再不明白的就百度。 1.2 USB协议版本USB 1.0/1.1(low/full speed),传输速率最大为12Mb…

【YashanDB数据库】statement级别的触发器在jdbc接口调用executeBatch时被多次触发

问题现象 某客户使用jdbc接口向yashandb的表A插入数据。 表A上有一个语句级触发器,其内容为在触发时执行alter sequence操作;另外还有一个insert时的行级触发器,其内容为将每行的部分列赋给新值,这些新值要么来自sequence.nextval,要么来自于current_timestamp。 客户向表…

Redis分布式锁防止缓存击穿

一、Nuget引入 StackExchange.Redis、DistributedLock.Redis依赖 二、使用 StackExchange.Redis 对redis操作做简单封装public class RedisHelper { private static ConnectionMultiplexer _redis; private static string _connectionString;// 静态构造函数,确保在程序启动时…

新西兰 WHV 打工度假签证 All In One

新西兰 WHV 打工度假签证 All In One New Zealand WHV (Working Holiday Visas)新西兰 WHV 打工度假签证 All In OneNew Zealand WHV (Working Holiday Visas)打工度假常见问题答疑我们为你整理一些关于新西兰打工度假签证的常见问题及解答,希望能够帮助准备中的你。我该如何申…

词云图大师(WordCloudMaster)上线Web端!

我们非常激动地宣布,词云图大师(WordCloudMaster)现已正式上线Web端!这一全新版本为用户带来了更多的便捷和功能,让创建和分享词云变得更加轻松。无论是企业、教育机构还是个人用户,都可以通过Web端实现快速生成和定制属于自己的词云图。 https://studio.wordcloudmaster…

图表全能王(ChartStudio) 上架VisionPro!

图表全能王(ChartStudio) - 终极图表制作工具!支持条形图、折线图、面积图、柱形图、条形图、饼图、玫瑰图、雷达图、牛肉图、风琴图、旭日图、桑基图等图表。 https://apps.apple.com/app/chartstudio-data-analysis/id6474099675 https://apps.apple.com/cn/app/%E5%9B%BE%E…