Guava EventBus
EventBus 是Guava的一个发布订阅的模型,先看一个简单的实现:
- 定义一个Event的消息传递对象
public class TestEvent1 {
private final int message;
/** * 构造方法 * @param message */
public TestEvent1(int message) {
this.message = message;
// System.out.println("TestEvent1 事件message:" message);
}
public int getMessage() {
return message;
}
}
- 定义一个Listener
public class EventListener {
public int lastMessage = 0;
@Subscribe public void listen(TestEvent1 event) {
lastMessage = event.getMessage();
System.out.println("Message:" lastMessage);
}
public int getLastMessage() {
return lastMessage;
}
}
- 定义一个使用
public static void main(String[] args) {
// 1.构造一个事件总线
EventBus eventBus = new EventBus("test");
// 2.构造一个事件监听器
EventListener listener = new EventListener();
// 3.把事件监听器注册到事件总线上
eventBus.register(listener);
// 4.事件总线发布事件,触发监听器方法
eventBus.post(new TestEvent1(1));
}
运行结果是:
代码语言:javascript复制 Message:1
如果是多个方法需要调用,只需要在新方法上面加上@Subscribe
注解。
@Subscribe
public void listen2(TestEvent1 event) {
lastMessage = event.getMessage();
System.out.println("Message2:" lastMessage);
}
如果想使用异步的方法处理,可以使用AsyncEventBus
,具体代码:
AsyncEventBus eventBus = new AsyncEventBus (Executors.newFixedThreadPool(3));
当然也可以注册多个EventListener。
代码语言:javascript复制 eventBus.register(new EventListener());
eventBus.register(new EventListener2());
(本文完)
作者:付威 博客地址:http://blog.laofu.online 如有任何知识产权、版权问题或理论错误,还请指正。