七叶笔记 » java编程 » SpringBoot实现自定义事件的方法详解

SpringBoot实现自定义事件的方法详解

简介

说明

本文用实例来介绍如何在SpringBoot中自定义事件来使用观察者模式。

事件的顺序

可使用实现Ordered接口的方式,调整监听器顺序。

注意:必须是同时实现 ApplicationListener<MyEvent>,Ordered这样的方法才能控制顺序。

下边几种都是无法控制顺序的:

@Component+@EventListerner+实现Ordered实现 ApplicationListener<MyEvent>+@Order

步骤1:自定义事件

通过继承ApplicationEvent来自定义事件。

构造器的参数为该事件的相关数据对象,监听器可以获取到该数据对象,进而进行相关逻辑处理。

步骤2:自定义监听器

方案1:ApplicationListener

法1:@EventListener

监听单个事件

或者

上边的办法比较好,因为不需要类型转换了。直接就能确定是MyEvent类型。

监听多个事件

事件进来之后,可以使用if(event instanceOf MyEvent.class)来判断是哪种事件。

监听所有ApplicationEvent

若使用这种写法,启动时会打印很多Spring自带的事件。任意ApplicationEvent都会进入这里边。

法2:实现ApplicationListener<T>接口

方案2:SmartApplicationListener

源码如下

supportsEventType:支持的事件的类型

supportsSourceType:支持的数据的类型

getOrder:2147483641:是2^31-1,也就是32位的int的最大正数 。

示例

事件

监听器1

监听器2

发布器

测试

启动后,访问:http://localhost:8080/test1

后端输出:

发布器所在线程:http-nio-8080-exec-2监听器:      MyListener2  所在线程:  http-nio-8080-exec-2  事件:      com.example.event.MyEvent[source=Hello]  事件的数据:Hello  是MyEvent?:true监听器:      MyListener  所在线程:  http-nio-8080-exec-2  事件:      com.example.event.MyEvent[source=Hello]  事件的数据:Hello  是MyEvent?:true

如果将监听器的实现的Ordered顺序颠倒,则输出结果如下:

发布器所在线程:http-nio-8080-exec-1监听器:      MyListener  所在线程:  http-nio-8080-exec-1  事件:      com.example.event.MyEvent[source=Hello]  事件的数据:Hello  是MyEvent?:true监听器:      MyListener2  所在线程:  http-nio-8080-exec-1  事件:      com.example.event.MyEvent[source=Hello]  事件的数据:Hello  是MyEvent?:true

步骤3:注册监听器 方式适用范围能否搭配@Async注解,进行异步监听@Component所有监听器能application.yml中添加配置实现ApplicationListener<T>接口的监听器不能启动类中注册实现ApplicationListener<T>接口的监听器不能

法1:@Component(适用于所有监听器)

法2:application.yml中添加配置

只适用于实现ApplicationListener<T>接口的监听器

context:  listener:    classes: com.example.event.MyListener,com.example.event.MyListener2

法3:启动类中注册

只适用于实现ApplicationListener<T>接口的监听器

步骤4:发布事件

法1:注入ApplicationContext,调用其publishEvent方法

法2:启动类中发布

以上就是SpringBoot实现自定义事件的方法详解的详细内容,更多关于SpringBoot自定义事件的资料请关注七叶笔记其它相关文章!

相关文章