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);
}