#EventBus(一) 首先在这里介绍一下Guava,引用并发编程网的说法,Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。 所有这些工具每天都在被Google的工程师应用在产品服务中。根据这段说明看来,Guava的定位应该和Apache Commons工具包类似。
今天要介绍的就是Guava中的EventBus(事件总线),EventBus通过对事件的发布和订阅,来实现对事件的处理。要了解事件总线,首先需要对观察者模式有一定了解,这里就不细讲观察者模式了。首先放一个EventBus的demo: ###1.1 接收消息的Service EventService.java
public class EventService {
/**
* 接收类型为String.class的Event
*/
@Subscribe
public void sub(String message) {
System.out.println(this.toString() + " : " +message);
}
}
###1.2 事件总线 Demo1.java public class Demo1 {
[@Test](https://my.oschina.net/azibug)
public void testEventBus(){
EventBus eventBus = new EventBus();
eventBus.register(new EventService());
eventBus.post("lanxiang ooooooo~~~~~");
}
}
运行测试用例,控制台输出,可以看到注册到EventBus中的EventService的订阅了事件类型为String.class的方法被执行了。
com.lanxiang.guava.eventbus.demo.EventService@4fbc9499 : lanxiang ooooooo~~~~~
###1.3 异步事件总线 Demo2.java
public class Demo2 {
[@Test](https://my.oschina.net/azibug)
public void testAysncEventBus() {
AsyncEventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(3));
eventBus.register(new EventService());
String message = "I have sent ";
for (int i = 0; i < 100; i++) {
eventBus.post(message + i + " numbers.");
}
System.out.println("============");
}
}
可以看到,使用Guava的EventBus只需要三个步骤:
* 初始化EventBus,可以选择异步事件总线,需要初始化线程池
* 把提供订阅服务的类注册到EventBus中
* 定义好接收Event的方法,给该方法加上@Subscribe注解,方法的参数即是订阅的事件类型
####下一章会介绍怎样动手写一个简单的EventBus,先出去健个身~~明天去美团报道啦,开心?