1,EventBus 简介:
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。
2,EventBus Demo:
package org.example.guava.eventbus;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
public class EventBusTest {
public static void main(String[] args) {
//创建一个eventBus 对象,myEventBus 是EventBus 对象的Id
EventBus eventBus = new EventBus("myEventBus");
//向eventBus 中注册监听者
eventBus.register(new EventListener());
//使用eventBus 发布一个事件,该事件会通知给所有注册的监听者。通知给Event 类型参数的监听方法
eventBus.post(new Event("hello every Listener, this is a eventMessage"));
}
}
/**
* 事件类,监听者监听的事件的包装对象
*/
class Event {
private String message;
public Event(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
@Override
public String toString() {
return "Event{" +
"message='" + message + '\'' +
'}';
}
}
/**
* 事件监听者类
*/
class EventListener {
/**
* 监听者的监听方法,必须加上 @Subscribe 注解,且只能有一个参数。实际触发一个事件的时候会根据方法参数类型触发对应的方法。
*
* @param event 事件对象
*/
@Subscribe
public void lisen(Event event) {
System.out.println("lisen 接收到消息:" + event);
}
@Subscribe
public void listen1(String event) {
System.out.println("lisen1 接收到消息:" + event);
}
}
3,使用总结
1)EventBus 发布一个事件,会通知给所监听者方法参数为事件参数类型的方法。
2)监听者有继承关系的,继承到的父类的监听方法,也会被通知到。
3)发布的事件对象的类型,也会通知到监听了其父类参数类型的监听方法。而发布的事件对象类型是父类,则不能通知到监听了其子类的监听方法。这个要注意。