当前位置: 首页 > news >正文

spring boot 事件机制

目录

  • 概述
  • 实践
    • 监听spring boot ready事件
      • 代码
    • 源码
      • 初始化流程
      • 调用流程
  • 结束

概述

spring boot 版本为 2.7.17

整体看一下springspring boot 相关事件。
在这里插入图片描述

根据下文所给的源码关键处,打上断点,可以进行快速调试。降低源码阅读难度。

实践

spring 相关事件

  • 上下文更新事件(ContextRefreshedEvent):该事件会在ApplicationContext更新时发布。也可以在调用ConfigurableApplicationContext接口中的refresh()方法时被触发。
  • 上下文开始事件(ContextStartedEvent):当容器ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。
  • 上下文停止事件(ContextStoppedEvent):当容ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。
  • 上下文关闭事件(ContextClosedEvent):当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。

spring boot 相关事件

  • ApplicationStartingEvent :spring boot启动开始时执行的事件
  • ApplicationEnvironmentPreparedEvent:spring boot 对应Enviroment已经准备完毕,但此时上下文context还没有创建。
  • ApplicationPreparedEvent:spring boot上下文context创建完成,但此时spring中的bean是没有完全加载完成的(org.springframework.boot.SpringApplicationRunListeners#environmentPrepared 这个触发加载配置文件)。
  • ApplicationFailedEvent:spring boot启动异常时执行事件

监听spring boot ready事件

代码

@Component
public class SpringBootReadyListener implements ApplicationListener<ApplicationReadyEvent> {@Overridepublic void onApplicationEvent(ApplicationReadyEvent event) {System.out.println("....ready..");}
}

窗口执行结果
在这里插入图片描述

源码

初始化流程

org.springframework.boot.SpringApplicationRunListener 很重要的接口,后面spring boot 发事件消息,使用这个接口的实现类 org.springframework.boot.context.event.EventPublishingRunListener 来执行。

org.springframework.boot.SpringApplication#getRunListeners

在这里插入图片描述

调用流程

org.springframework.boot.SpringApplication#run(java.lang.Class<?>[], java.lang.String[])
org.springframework.boot.SpringApplication#run(java.lang.String...)
org.springframework.boot.SpringApplicationRunListeners#ready
org.springframework.boot.SpringApplicationRunListeners#doWithListeners(java.lang.String, java.util.function.Consumer<org.springframework.boot.SpringApplicationRunListener>, java.util.function.Consumer<org.springframework.core.metrics.StartupStep>)
org.springframework.boot.context.event.EventPublishingRunListener#ready
org.springframework.context.support.AbstractApplicationContext#publishEvent(java.lang.Object, org.springframework.core.ResolvableType)
org.springframework.context.support.AbstractApplicationContext#getApplicationEventMulticaster
org.springframework.context.event.SimpleApplicationEventMulticaster#invokeListener
org.springframework.context.event.SimpleApplicationEventMulticaster#doInvokeListener

在这里插入图片描述

发送启动 ready 事件消息。
在这里插入图片描述
在这里插入图片描述

执行结束
在这里插入图片描述

结束

根据上文所给的源码关键处,打上断点,可以进行快速调试。降低源码阅读难度。

http://www.lryc.cn/news/253011.html

相关文章:

  • 分布式版本管理系统---->Git(Linux---centos(保姆式)讲解1)
  • B树你需要了解一下
  • MFC设置状态栏文本导致崩溃的原因
  • 配置typroa上传图片到gitee
  • java并发-线程生命周期
  • Javaweb之Vue路由的详细解析
  • 力扣:196. 删除重复的电子邮箱(Python3)
  • Ruby和HTTParty库下载代码示例
  • Unity 使用Horizontal Layout Group和Toggle制作多个水平开关按钮实现自动排列和单个点击放大后的自动排列。
  • Python实现FA萤火虫优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战
  • 灯塔ARL-NPoC全面教程
  • λ表达式、智能指针
  • PHP基础知识和操作
  • 系列十三、SpringBoot的自动配置原理分析
  • soapui报错: CXF directory must be set in global preferences
  • Netty02-基础概念
  • 计算机毕业设计 基于SpringBoot的敬老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 精调llama模型
  • 【C语言】深入理解C语言中的数学运算和类型转换
  • 基于javaweb的宠物服务商城系统设计与开发
  • LeetCode-470. 用 Rand7() 实现 Rand10()【数学 拒绝采样 概率与统计 随机化】
  • 通达信指标公式19:龙虎榜股票池——主力控盘度的计算方法
  • 手搓图片滑动验证码_JavaScript进阶
  • Linux服务器超级实用的脚本
  • IntelliJ IDEA安装使用教程#intellij idea
  • 【组合数学】容斥鸽巢原理
  • 视频后期特效处理软件 Motion 5 mac中文版
  • 【智能家居】一、工厂模式实现继电器灯控制
  • 第三节:提供者、消费者、Eureka
  • Leetcode刷题详解——等差数列划分