Loading

spring自定义Listener

前言

为什么要自定义Listener
通过自定义,可以在程序启动过程中监听特定事件,再回调处理逻辑。

其中,有两种方法,自定义SpringApplicationRunListener 或者 自定义ApplicationListener。

自定义SpringApplicationRunListener

1、创建自定义SpringApplicationRunListener,在回调方法中实现自定义的处理逻辑

public class CustomSpringRunListener implements SpringApplicationRunListener {
    public CustomSpringRunListener(SpringApplication application, String[] args) {
        System.out.println("CustomSpringRunListener constructor");
    }

    public void starting() {

    }

    public void environmentPrepared(ConfigurableEnvironment environment) {

    }

    public void contextPrepared(ConfigurableApplicationContext context) {

    }

    public void contextLoaded(ConfigurableApplicationContext context) {

    }

    public void started(ConfigurableApplicationContext context) {

    }

    public void running(ConfigurableApplicationContext context) {

    }

    public void failed(ConfigurableApplicationContext context, Throwable exception) {

    }
}

2、在META/spring.factories中声明自定义Listener

org.springframework.boot.SpringApplicationRunListener=\
  edu.xjh.test.listener.CustomSpringRunListener

从而,SpringBoot启动过程中会扫描META/spring.factories,加载所有的SpringApplicationRunListener

自定义ApplicationListener

1、自定义ApplicationListener,实现onApplicationEvent逻辑

public class CustomApplicationListener implements ApplicationListener<ApplicationEvent> {
    public void onApplicationEvent(ApplicationEvent event) {
		// 判断事件类型,执行特定处理逻辑
        if (event instanceof ApplicationStartingEvent) {
            System.out.println("CustomApplicationListener catch ApplicationStartingEvent");
        }else if (event instanceof ApplicationEnvironmentPreparedEvent) {
            System.out.println("CustomApplicationListener catch ApplicationEnvironmentPreparedEvent");
        }
    }
}

2、声明ApplicationListener
方法1:
META/spring.factories中声明自定义ApplicationListener,因为启动过程中会扫描该文件进行加载

org.springframework.context.ApplicationListener=\
  edu.xjh.test.listener.CustomApplicationListener

方法2:
在实例化SpringApplication之后,手动添加Listener

public static void main(String[] args) {
	SpringApplication application = new SpringApplication(DemoApp.class);
	application.addListeners(new CustomApplicationListener());
	application.run(args);
}
posted @ 2021-08-12 17:41  flowers-bloom  阅读(492)  评论(0编辑  收藏  举报