Guava 提供了事件总线的一个实现方案EventBus。它是事件发布订阅模式的实现,观察者模式。Guava为我们提供了同步实现EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的
eventBus.post(1);
eventBus.post(1L);
post方法,直接发布事件
订阅者需要注册进来,eventBus.register方法注册订阅者。
订阅者的方法需要加上**@Subscribe注解**就可以监听事件了。订阅者的实例类对应的是自定义的方法。也就是自己定义class可以有多个带Subscribe方法。每个方法都是一个监听者。自定义方法只能有一个参数,参数类型一致,事件就会执行。参数不能是简单类型,要封装类型。
如果eventBus发出的事件,没有任何订阅者处理,eventBus就会发出一个DeadEvent,我们可以监测这个事件。
@Subscribe public void lister(DeadEvent event) { System.out.printf("%s=%s from dead events%n", event.getSource().getClass(), event.getEvent()); }
class com.google.common.eventbus.AsyncEventBus=java.lang.Object@6726973 from dead events
注意:同一个类只能register一次,避免重复预订。多次预订无效。重写了equals方法并标识为final。
eventBus有个属性identifier,用来标识。这说明在一个应用里是可以有多个EventBus的。
当存在继承时,@Subscribe 是可以继承下来的。重写方法不需要在加这个注解 也会监听事件。
参考
http://blog.csdn.net/yanghua\_kobe/article/details/46317297