Spring中的SpringApplicationRunListener详细解析
前言
SpringApplicationRunListener是一个监听SpringApplication中run方法的接口。在项目启动过程的各个阶段进行事件的发布。
实现SpringApplicationRunListener接口的类由类路径下加载(META-INF/spring.factories)进行初始化。
想要实现SpringApplicationRunListener接口,需要提供能够接收SpringApplication和String[] args的构造器。
SpringApplication.run(CommonsTestApplication.class, args);
SpringApplicationRunListener 类方法
SpringApplicationRunListener 的方法在项目启动的各个阶段提供事件发布的接口。因此可以通过实现SpringApplicationRunListener 接口,达到在启动的各个过程中进行扩展
public interface SpringApplicationRunListener { void starting();//run方法开始执行,发布ApplicationStartingEvent事件 //环境准备好时,发布ApplicationEnvironmentPreparedEvent事件 void environmentPrepared(ConfigurableEnvironment environment); //容器的上下文准备初始化完毕,发布ApplicationContextInitializedEvent void contextPrepared(ConfigurableApplicationContext context); //上下文加载配置时候,对应ApplicationPreparedEvent void contextLoaded(ConfigurableApplicationContext context); //上下文刷新且应用启动时,并且在CommandLineRunner和ApplicationRunners还没唤醒前,发布程序以及启动事件ApplicationStartedEvent void started(ConfigurableApplicationContext context); //在上下文刷新,应用已经启动,在CommandLineRunner和ApplicationRunners唤醒后,并且在run方法快执行结束前执行,发布ApplicationReadyEvent,代表程序已经准备好 void running(ConfigurableApplicationContext context); //当运行程序失败时,发布ApplicationFailedEvent事件。 void failed(ConfigurableApplicationContext context, Throwable exception); }
实现
1.实现SpringApplicationRunListener接口
注意添加能够接收SpringApplication 和String[] 的构造器
在started方法中添加了自定义的事件发布。
package com.wzx.listener; import com.wzx.event.TestApplication; import com.wzx.event.TestApplicationEvent; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplicationRunListener; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; /** * @Description: TODO * @author: wengzx * @date: 2021年04月14日 16:01 */ public class TestSpringApplicationRunListener implements SpringApplicationRunListener { private final SpringApplication application; private final String[] args; public TestSpringApplicationRunListener(SpringApplication application, String[] args1) { this.application = application; this.args = args1; } @Override public void starting() { System.out.println("TestSpringApplicationRunListener is starting"); } @Override public void environmentPrepared(ConfigurableEnvironment environment) { System.out.println("TestSpringApplicationRunListener is environmentPrepared"); } @Override public void contextPrepared(ConfigurableApplicationContext context) { System.out.println("TestSpringApplicationRunListener is contextPrepared"); } @Override public void contextLoaded(ConfigurableApplicationContext context) { System.out.println("TestSpringApplicationRunListener is contextLoaded"); } @Override public void started(ConfigurableApplicationContext context) { System.out.println("TestSpringApplicationRunListener is started"); TestApplication testApplication = new TestApplication(); testApplication.setName("zhangsan"); testApplication.setAge(23); TestApplicationEvent testApplicationEvent = new TestApplicationEvent(testApplication); context.publishEvent(testApplicationEvent); } @Override public void running(ConfigurableApplicationContext context) { System.out.println("TestSpringApplicationRunListener is running"); } @Override public void failed(ConfigurableApplicationContext context, Throwable exception) { System.out.println("TestSpringApplicationRunListener is failed"); } }
2.配置META-INF/spring.factories
3.在SpringApplication.run(String... args)方法内断点启动程序,可以发现获得了自定义的程序监听器。
4.查看控制台输出
可以看出在各个阶段的输出,可以此类来扩展程序。
到此这篇关于Spring中的SpringApplicationRunListener详细解析的文章就介绍到这了,更多相关SpringApplicationRunListener解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
PowerJob的QueryConvertUtils工作流程源码解读
这篇文章主要为大家介绍了PowerJob的QueryConvertUtils工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2024-01-01SpringCloud Config分布式配置中心使用教程介绍
springcloud config是一个解决分布式系统的配置管理方案。它包含了 client和server两个部分,server端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client端通过接口获取数据、并依据此数据初始化自己的应用2022-12-12解决Mybatis mappe同时传递 List 和其他参数报错的问题
在使用MyBatis时,如果需要传递多个参数到SQL中,可以遇到参数绑定问题,解决方法包括使用@Param注解和修改mapper.xml配置,感兴趣的朋友跟随小编一起看看吧2024-09-09Java深入分析Iterator迭代器与foreach循环的使用
这篇文章主要介绍了Java-Iterator迭代器与foreach循环,主要包括Iterator迭代器接口的操作方法和foreach 循环语法解析,需要的朋友可以参考下2022-05-05
最新评论