首页 > 其他分享 >SpringBoot-事件监听机制

SpringBoot-事件监听机制

时间:2024-08-05 17:06:25浏览次数:11  
标签:ApplicationContext SpringBoot spring boot SpringApplication 事件 监听器 机制 监听

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

标签:ApplicationContext,SpringBoot,spring,boot,SpringApplication,事件,监听器,机制,监听
From: https://www.cnblogs.com/hld123/p/18343607

相关文章

  • tomcat10 springboot项目部署成功但springboot没有启动日志问题
    问题描述项目在tomcat8可以启动成功,请求也可以正常处理,在tomcat10上只有部署成功信息比如:deployWARDeploymentofwebapplicationarchive[/data1/WWW/webapps/XXX.war]hasfinishedin[127]ms,但是没有springboot启动的信息。该问题不属于springboot打包为war包不成......
  • Halo 建站 | 基于 Token 的持久化登录机制实践
    ......
  • Springboot注解
    Springboot注解DAO、Service、Controller1、dao层dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,dao层的设计首先是设计dao层的接口,然后在Spring的配置文件中定义此接口的实现类,dao层的数据源配置,以及有关数据库连接参数都在Spring配置文件中进行......
  • springboot自学(6)springboot核心原理
    Springboot启动流程初始化各种属性,加载成对象  读取环境属性(Environment)  系统配置(spring.factories)  参数(Arguments、application.properties)创建Spring容器对象ApplicationContext,加载各种配置在容器创建前,通过监听器机制,应对不同阶段加载数据、更新数据的要求......
  • 异常处理机制
    异常处理机制目录异常处理机制捕捉异常try……catch来捕获错误多个catch和finally抛出异常throwthrows异常的传播捕捉异常try……catch来捕获错误try{Strings=processFile(“C:\\test.txt”);//ok:}catch(FileNotFoundExceptione){//filenotfound......
  • mysql分区自动维护(SpringBoot+MybatisPlus)
    1.环境SpringBoot+MybatisPlus+MySQL2.简介通过定时器@Scheduled每日触发,查询当前库中所有分区表(这里以时间段进行分区)判断剩余分区是否小于自定义预留分区(无自定义预留分区则取默认分区配置),若小于预留分区时,自动创建分区至配置分区数判断已有分区是否大于自定义保留分......
  • springboot多数据源整合及使用(一个oracle,两个mysql)
    在开发工作中,会遇到需要使用多个数据源的情况,比如项目一开始只有oracle,后面需要追加两个mysql数据源使用,这时候就需要配置多数据源了.首先,配置文件的编写:版本如下spring:datasource:db1:driver-class-name:com.mysql.cj.jdbc.Driverurl:......
  • 免费【2024】springboot 大学校园旧物捐赠网站的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 大学生家教管理系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • springboot+vue酒店信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展和消费者需求的日益多元化,酒店行业正面临着前所未有的挑战与机遇。传统的酒店管理模式已难以满足现代酒店高效运营、精准服务及客户体验优化的需求。在此背景下,酒店信息管理系统(HotelInformationManagementSys......