Spring中的SpringApplicationRunListener详细解析
作者:阿孟呀
这篇文章主要介绍了Spring中的SpringApplicationRunListener详细解析,SpringApplicationRunListener是一个监听SpringApplication中run方法的接口,在项目启动过程的各个阶段进行事件的发布,需要的朋友可以参考下
前言
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解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!