SpringBoot-2.SpringApplicationRunListener分析

目录

前言

SpringApplicationRunListener 类方法

实现

1.实现SpringApplicationRunListener接口

2.配置META-INF/spring.factories


 

前言

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.查看控制台输出

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿孟呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值