动手做一个EventBus(一):Guava和EventBus的使用

#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,先出去健个身~~明天去美团报道啦,开心?

转载于:https://my.oschina.net/u/3421586/blog/894305

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值