目录
新建自定义的TestGenericApplicationListener类
前言
ApplicationListener的两个扩展接口GenericApplicationListener和SmartApplicationListener,是对ApplicationListener的进一步封装。
新增的两个方法:
supportsEventType:判断事件类型(ApplicationEvent)是否是指定的。
supportsSourceType:默认为true,判断事件的来源是否是指定的类型
扩展接口在监听到事件之前进行判断,都满足条件的情况下,才能进行事件的接收,即进入onApplicationEvent方法。
实现接口如下图:
源码
案例源码地址
应用
新建自定义的TestGenericApplicationListener类
当发布的事件类型为TestApplicationEvent,来源为TestApplication类时,才能执行onApplicationEvent。
package com.wzx.listener;
import com.wzx.event.TestApplication;
import com.wzx.event.TestApplicationEvent;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.GenericApplicationListener;
import org.springframework.core.ResolvableType;
/**
* @Description: TODO
* @author: wengzx
* @date: 2021年04月21日 11:09
*/
public class TestGenericApplicationListener implements GenericApplicationListener {
@Override
public boolean supportsEventType(ResolvableType eventType) {
Class<?> type = eventType.getRawClass();
if (type == null) {
System.out.println("supportsEventType返回false"+type);
return false;
}
return TestApplicationEvent.class.isAssignableFrom(type);
}
@Override
public boolean supportsSourceType(Class<?> sourceType) {
System.out.println("supportsSourceType来源类型"+sourceType+":"+TestApplication.class.isAssignableFrom(sourceType));
return TestApplication.class.isAssignableFrom(sourceType);
}
@Override
public int getOrder() {
return 0;
}
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof TestApplicationEvent) {
System.out.println("TestGenericApplicationListener onApplicationEvent");
}
}
}
发布事件
导入配置文件
启动
可以看到当
supportsEventType和supportsSourceType都返回true时,才能执行onApplicationEvent方法