Spring中的SpringApplicationRunListener详细解析

 更新时间:2023年11月15日 08:38:22   作者:阿孟呀  
这篇文章主要介绍了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解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简述Java中进程与线程的关系_动力节点Java学院整理

    简述Java中进程与线程的关系_动力节点Java学院整理

    在 Java 语言中,对进程和线程的封装,分别提供了 Process 和 Thread 相关的一些类。本文首先简单的介绍如何使用这些类来创建进程和线程
    2017-05-05
  • 解决Mybatis的serverTimezone时区出现问题

    解决Mybatis的serverTimezone时区出现问题

    这篇文章主要介绍了解决Mybatis的serverTimezone时区出现问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java观感示例分享

    java观感示例分享

    这篇文章主要介绍了java观感示例,该实例查询并生成了系统中存在观感对应的按钮并在用户点击相应按钮时将窗口的观感切换到指定的观感上
    2014-03-03
  • SpringBoot中获取profile的方法详解

    SpringBoot中获取profile的方法详解

    这篇文章主要介绍了springboot获取profile的操作,文中的示例代码讲解详细,具有很好的参考价值,希望对大家有所帮助
    2022-04-04
  • Java杂谈之如何消除代码中一大串参数列表

    Java杂谈之如何消除代码中一大串参数列表

    参数列表和字面意思差不多,主要是表示该参数数量不是固定的,可能会有一个参数,可能多个,不管多少个参数,都放到一个数组处理,这种参数叫可变参数。可变长参数要放在最后一个参数位置处理,但是一个函数里面不能有俩种类型的可变参数
    2021-10-10
  • SpringBoot 自动配置失效的解决方法

    SpringBoot 自动配置失效的解决方法

    本文主要介绍了SpringBoot 自动配置失效的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • JDBC自定义连接池过程详解

    JDBC自定义连接池过程详解

    这篇文章主要介绍了JDBC自定义连接池过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Jackson使用示例-Bean、XML、Json之间相互转换

    Jackson使用示例-Bean、XML、Json之间相互转换

    Jackson是一个强大工具,可用于Json、XML、实体之间的相互转换,JacksonXmlElementWrapper用于指定List等集合类,外围标签名,JacksonXmlProperty指定包装标签名,或者指定标签内部属性名,JacksonXmlRootElement指定生成xml根标签的名字,JacksonXmlText指定当前这个值
    2024-05-05
  • Spring @Scheduler使用cron表达式时的执行问题详解

    Spring @Scheduler使用cron表达式时的执行问题详解

    Spring给程序猿们带来了许多便利。下面这篇文章主要给大家介绍了关于Spring @Scheduler使用cron表达式时的执行问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • Mybatis 复杂对象resultMap的使用

    Mybatis 复杂对象resultMap的使用

    这篇文章主要介绍了Mybatis 复杂对象resultMap的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论