通过ApplicationListener监听多个事件

ApplicationListener接口拥有一个子接口SmartApplicationListener,springboot中有一些重要的定制化监听器都是直接或间接的通过实现SmartApplicationListener接口来实现的这个接口中拥有一个supportsEventType抽象方法,源码如下:

public interface SmartApplicationListener extends ApplicationListener<ApplicationEvent>, Ordered {
    boolean supportsEventType(Class<? extends ApplicationEvent> var1);

    default boolean supportsSourceType(@Nullable Class<?> sourceType) {
        return true;
    }

    default int getOrder() {
        return 2147483647;
    }
}

该方法主要通过调用Class类中的isAssignableFrom来判断监听的事件类是否和参数传递的事件类相同或者是参数事件类的子类,如果是则返回true并监听,反之则返回false,不监听。所以,如果我们想监听多个事件,可以建一个事件类数组,将想监听的事件类放入其中,然后通过遍历事件类数组并比较参数事件类。源码如下:

public class CustomeGenericApplicationListener implements SmartApplicationListener {

    private static final Class<?>[] EVENT_CLASS = {ApplicationContextInitializedEvent.class, ApplicationPreparedEvent.class};

    @Override
    public boolean supportsEventType(Class<? extends ApplicationEvent> aClass) {
        for (Class cls:EVENT_CLASS) {
            if (cls.isAssignableFrom(aClass)){
                return true;
            }
        }
        return false;
    }

    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        System.out.println("CustomeGenericApplicationListener监听到"+applicationEvent.getClass()+"类型事件");
    }
}

isAssignableFrom方法:

官方解释:确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回 true;否则返回false。如果此 Class 对象表示原始类型,则如果指定的 Class 参数正是此 Class 对象,则此方法返回 true;否则返回false。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

龙茶清欢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值