guava笔记四:EventBus简介
EventBus是什么
EventBus
是用来实现发布component之间的通信而且不需要明确的注册。然而,guava的EventBus并非是用来代替事件发布订阅的library,也不是为了进程之间的交互。
Example
//Class is typical registered by the container.
class EventBusChangeRecorder{
@Subscriber public void recordCustomerChange(ChangeEvent e){
recordChange(e.getChange());
}
}
// somewhere during initialization
eventBus.register(new EventBusChangeRecorder());
// much later
public void changeCustomer(){
ChangeEvent event = getChangeEvent();
eventBus.post(event)
}
快速介绍
For Listener
监听一个自定义事件:
- 传统方式。实现一个事件的接口。比如说CustomerChangeEventListener.
- 使用EventBus。创建一个接受CustomerChangeEvent作为参数的方法,并且使用
@Subscribe
标识.
注册监听的方法:
传统方式: 把object传给每个生产者registerCustomerChangeEventListener方法.这些方法很少定义于公共的接口中, 需要知道每个额外的生产者,也须知道它的类型.
使用EventBus:使用
EventBus.register(object)
方法进行注册。你只需要保证每个生产者都享有一个EventBus.
监听一个更通用的对象类型:
* 传统方式: 不简单。
* 使用EventBus:event自动调度父类的监听器,允许监听object的监听类型和通配符监听器。
监听没有调度的监听器:
* 传统方式:增加代码到事件发布方法(或许使用AOP)
* 使用EventBus:订阅DeadEvent
.这个EventBus
将会告诉你任何发布的事件,但是不会分发.
对于生产者
track 事件监听器
- 传统方式: 写代码来管理这些监听器,包括同步,或者使用
EventListenerList
类 - 使用EventBus:
EventBus
会自己做到这些.
发布事件给监听器
- 传统方式: 通过创建方法去发布,包括错误隔离和异步。
- 使用EventBus: 使用
EventBus.post(Object)
方法
术语
Name | Description |
---|---|
Event | 发布事件 |
Subscribing | 注册监听器,所以可以接受到事件并处理 |
Listener | 用来接收事件,并且需要暴露出handler方法 |
Handler method | 一个公共的方法,用来分发时间。需要使用@Subsrcibe 标识 |
Posting an event | 发布事件给监听器 |