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中实现树形菜单的两种方式

    这篇文中,我一共会用两种方式来实现目录树的数据结构,两种写法逻辑是一样的,只是一种适合新手理解,一种看着简单明了但是对于小白不是很好理解,在这里我会很详细的讲解每一步代码,主要是方便新人看懂,弥补曾经自己学习过程中的苦恼,需要的朋友可以参考下
    2023-09-09
  • Java中@RequiredArgsConstructor使用详解

    Java中@RequiredArgsConstructor使用详解

    这篇文章主要介绍了Java中@RequiredArgsConstructor使用的相关资料,@RequiredArgsConstructor是Lombok库提供的一个注解,用于自动生成一个包含所有final字段和非空字段的构造函数,需要的朋友可以参考下
    2025-05-05
  • 浅谈java获取服务器基本信息

    浅谈java获取服务器基本信息

    这篇文章主要介绍了java获取服务器基本信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • JavaMail实现发送邮件功能

    JavaMail实现发送邮件功能

    这篇文章主要为大家详细介绍了JavaMail实现发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Spring中读取配置文件的五种方式

    Spring中读取配置文件的五种方式

    在使用spring或springboot项目开发中,难免会涉及到读取配置文件的各种配置参数的情况,因为当项目的规模上去之后,在单个配置文件中维护所有的配置信息很难满足实际的需要,所以本文给大家介绍了Spring读取配置文件多种方式,需要的朋友可以参考下
    2024-04-04
  • java连接SQL Server数据库图文教程(自用)

    java连接SQL Server数据库图文教程(自用)

    在Java应用程序中,我们经常需要与数据库进行交互,下面这篇文章主要给大家介绍了关于java连接SQL Server数据库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • 滴滴二面之Kafka如何读写副本消息的

    滴滴二面之Kafka如何读写副本消息的

    这篇文章主要给大家介绍了关于滴滴二面之Kafka如何读写副本消息的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Java代码实现循环队列的示例代码

    Java代码实现循环队列的示例代码

    队列作为基础的数据结构,是程序员的入门课。也是所有程序员必须掌握的一种数据结构,队列在程序中广泛应用,因此我们应该对队列有深入的了解,接下来我们通过代码来对队列这种数据结构进行深度解析,感兴趣的朋友一起看看吧
    2021-09-09
  • Java中的System.arraycopy()浅复制方法详解

    Java中的System.arraycopy()浅复制方法详解

    这篇文章主要介绍了Java中的System.arraycopy()浅复制方法详解,Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制,需要的朋友可以参考下
    2023-11-11
  • java 工厂模式的讲解及优缺点的介绍

    java 工厂模式的讲解及优缺点的介绍

    这篇文章主要介绍了java 工厂模式的讲解及优缺点的介绍的相关资料, 简单工厂模式,又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式,需要的朋友可以参考下
    2017-08-08

最新评论