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