SpringBoot扩展接口- ApplicationListener 事件监听器

ApplicationListener监听器用来监听ApplicationEvent事件。

ApplicationListener 可以在Spring项目运行过程中,监听对应的事件,来完成相应的操作。

 

ApplicationListener接口

是Spring应用生命周期各个阶段的事件监听器,可以在任意一个阶段触发我们想要执行的操作
负责在每个阶段做做对应处理
比如
ApplicationEnvironmentPreparedEvent环境准备完成事件中加载配置文件属性到数据源中

在SpringBoot启动过程中,要自定义监听SpringBoot启动过程中的事件。

SpringBoot启动流程中用到了事件都是继承自 SpringApplicationEvent 类

复制代码
1、ApplicationStartingEvent:  在Spring最开始启动的时候触发
  日志系统初始化,字符集初始化,消息转换器,类型转换器初始化。
2、ApplicationEnvironmentPreparedEvent:环境准备完成事件,在Spring已经准备好上下文但是上下文尚未创建的时候触发
  命令行参数,配置文件属性源加载到Environment
3、ApplicationPreparedEvent:上下文准备完成事件,刷新上下文之前触发 4、ApplicationStartedEvent:应用启动完成事件,在刷新上下文之后、调用application命令之前触发
  在这里bean定义加载,并实例化完成,已经注册到BeanFactory
5、ApplicationReadyEvent:在调用applicaiton命令之后触发 6、ApplicationFailedEvent:在启动Spring发生异常时触发
复制代码

添加启动流程的事件监听器的常用方法有两种

1、在META-INF/spring.factories文件中设置监听器:

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.ClearCachesApplicationListener,\
org.springframework.boot.builder.ParentContextCloserApplicationListener,\

2、在启动类中,先调用SpringApplication构造方法,再将自定义监听器设置进去。

 

在SpringBoot启动过程中,上下文事件监听器的处理过程

prepareContext()方法中

listeners.contextLoaded(context);

执行这个代码时,会将SpringApplication中的 监听器列表复制到ApplicationContext的监听器列表中。

 

到 refreshContext()方法时,

initApplicationEventMulticaster();
registerListeners();

会初始化ApplicationContext的事件广播类,SimpleApplicationEventMulticaster

将ApplicationContext的 事件监听器列表, BeanFactory中的 ApplicationListener实现类的Bean定义名称都注册到事件广播器中。

 

启动过程的事件之外的事件(自定义)

自定义事件以及事件监听器的方法

除了上面两种方法外,

3、实现监听器类,定义为Bean类,可以被自动添加到列表中

 

SpringApplicationRunListener接口

SpringBoot中的事件广播是通过监听器SpringApplicationRunListener接口实现类EventPublishingRunListener来进行事件分发从而调用ApplicationListener监听器的

所以我们可以配置自定义的springboot的监听器

配置在META-INF/spring.factories文件中配置

# Run Listeners
org.springframework.boot.SpringApplicationRunListener=\
org.springframework.boot.context.event.EventPublishingRunListener

 

posted @   海绵般汲取  阅读(869)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示