最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)以及 合集全部源码
环境:Spring Boot2.7.18
1. 简介
Guava的 EventBus 允许组件之间以发布-订阅的方式进行通信,而无需组件之间相互显式注册(从而相互知晓)。它专门设计用于替换使用显式注册的传统 Java 进程内事件分发机制。它不是一个通用的发布-订阅系统,也不适用于进程间通信。如下是 EventBus 异步事件处理示例:
// 定义事件监听器
public class PackEventListener {
// 监听方法,必须在该方法上使用该注解
// 对应参数你可以自定义
@Subscribe
public void onEvent(Object eventObject) {
System.out.printf("%s, %s%n", Thread.currentThread().getName(), eventObject) ;
}
}
有个事件订阅者,接下来就是事件的注册和发布了。
// 创建了异步事件总线,如果你需要同步则可以去掉Async
// 这里指定了一个线程池,用来执行异步事件
EventBus bus = new AsyncEventBus(Executors.newFixedThreadPool(2)) ;
PackEventListener packEventListener = new PackEventListener() ;
// 注册事件
bus.register(packEventListener) ;
// 事件发布
bus.post("xxxooo") ;
运行结果
pool-1-thread-1, xxxooo
非常的简单,你还可以通过如下方法来取消注册的事件
PackEventListener packEventListener = new PackEventListener();
EventBus bus = ... ;
bus.register(packEventListener) ;
// ...
// 取消注册
bus.unregister(packEventListener);
以上是Guava中关于事件的基本使用。接下来我将详细的介绍如果基于Spring Boot实现事件的自动注册与动态取消。
本示例使用如下Guava版本
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.3.1-jre</version>
</dependency>
该版本目前最新的
2. 实战案例
本案例我会通过BeanPostProcessor在创建/销毁 Bean 时自动为事件注册和取消注册对象,而不是通过上面 EventBus 手动的方法注册。
2.1 自定义全局事件总线