目录
SpringApplicationRunListener 类方法
1.实现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.查看控制台输出
可以看出在各个阶段的输出,可以此类来扩展程序。