开发者

Spring中的SpringApplicationRunListener详细解析

开发者 https://www.devze.com 2023-11-19 11:33 出处:网络 作者: 阿孟呀
目录前言SpringApplicationRunListener 类方法实现前言 SpringApplicationRunListener是一个监听Sprhttp://www.devze.comingApplication中run方法的接口。在项目启动过程的各个阶段进行事件的发布。
目录
  • 前言
  • SpringApplicationRunListener 类方法
  • 实现

前言

SpringApplicationRunListener是一个监听Sprhttp://www.devze.comingApplication中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.spandroidringframework.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("编程TestSpringApplicationRunjsListener 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

Spring中的SpringApplicationRunListener详细解析

3.在SpringApplication.run(String... args)方法内断点启动程序,可以发现获得了自定义的程序监听器。

Spring中的SpringApplicationRunListener详细解析

4.查看控制台输出

可以看出在各个阶段的输出,可以此类来扩展程序。

Spring中的SpringApplicationRunListener详细解析

到此这篇关于Spring中的SpringApplicationRunListener详细解析的文章就介绍到这了,更多相关SpringApplicationRunLphpistener解析内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号