Guava EventBus简介
Contents
1. 概述
Guava 库提供了允许组件之间发布-订阅通信的EventBus 。在本教程中,我们将了解如何使用EventBus的一些功能。
2. 设置
首先,我们在pom.xml 中添加 Google Guava 库依赖项:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
最新版本可以在这里 找到。
3. 使用EventBus
让我们从一个简单的例子开始。
3.1. 设置
我们首先查看EventBus对象。它可以注册监听器和发布事件。使用它就像实例化类一样简单:
EventBus eventBus = new EventBus();
Guava 库使您可以自由地以最适合您的开发需求的任何方式使用EventBus 。
3.2. 创建监听器
我们创建一个侦听器类,该类具有接收特定事件的处理程序方法。我们使用*@Subscribe*注解处理程序方法。该方法接受与要发布的事件相同类型的对象作为参数:
public class EventListener {
private static int eventsHandled;
@Subscribe
public void stringEvent(String event) {
eventsHandled++;
}
}
3.3. 注册监听器
我们可以通过在EventBus上注册EventListener类来订阅事件:
EventListener listener = new EventListener();
eventBus.register(listener);
3.4. 注销监听器
如果出于任何原因我们想从EventBus中注销一个类,也可以轻松完成:
eventBus.unregister(listener);
3.5. 发布活动
我们也可以使用EventBus发布事件:
@Test
public void givenStringEvent_whenEventHandled_thenSuccess() {
eventBus.post("String Event");
assertEquals(1, listener.getEventsHandled());
}
3.6. 发布自定义事件
我们还可以指定一个自定义事件类并发布该事件。我们首先创建一个自定义事件:
public class CustomEvent {
private String action;
// standard getters/setters and constructors
}
在EventListener类中为该事件添加一个处理程序方法:
@Subscribe
public void someCustomEvent(CustomEvent customEvent) {
eventsHandled++;
}
我们现在可以发布我们的自定义事件:
@Test
public void givenCustomEvent_whenEventHandled_thenSuccess() {
CustomEvent customEvent = new CustomEvent("Custom Event");
eventBus.post(customEvent);
assertEquals(1, listener.getEventsHandled());
}
3.7. 处理DeadEvent的事件
我们提供了一个DeadEvent类,它允许我们处理任何没有侦听器的事件。我们可以添加一个方法来处理DeadEvent类:
@Subscribe
public void handleDeadEvent(DeadEvent deadEvent) {
eventsHandled++;
}