spring boot 事件机制

概述

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> {
   

    @Override
    public 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 事件消息。
在这里插入图片描述
在这里插入图片描述

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

结束

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

相关推荐

  1. SpringBoot事务传播机制

    2023-12-05 16:42:04       46 阅读
  2. springboot 事件发布机制源码浅析】

    2023-12-05 16:42:04       54 阅读
  3. springboot事件发布机制之生产运用

    2023-12-05 16:42:04       40 阅读
  4. springboot事务管理的机制是什么

    2023-12-05 16:42:04       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 16:42:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 16:42:04       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 16:42:04       82 阅读
  4. Python语言-面向对象

    2023-12-05 16:42:04       91 阅读

热门阅读

  1. C语言二维数组

    2023-12-05 16:42:04       69 阅读
  2. 大数据基础设施搭建 - Sqoop

    2023-12-05 16:42:04       58 阅读
  3. 简单介绍Docker

    2023-12-05 16:42:04       47 阅读
  4. 【C++】sizeof()、strlen()、length()\以及size()用法区别

    2023-12-05 16:42:04       55 阅读
  5. Flyway——Oracle创建前缀索引

    2023-12-05 16:42:04       62 阅读
  6. oracle 19c rac 安装手册

    2023-12-05 16:42:04       45 阅读
  7. mysql学习记录

    2023-12-05 16:42:04       42 阅读
  8. Oracle之ORA-29275: 部分多字节字符

    2023-12-05 16:42:04       62 阅读
  9. Redis下载安装教程(详细步骤)

    2023-12-05 16:42:04       64 阅读
  10. Python实现pdf文件转word文件

    2023-12-05 16:42:04       57 阅读
  11. MySQL数据库命令详解(二)

    2023-12-05 16:42:04       59 阅读