文档章节

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

大光头兰翔
 大光头兰翔
发布于 2017/05/07 16:19
字数 480
阅读 107
收藏 6

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

© 著作权归作者所有

大光头兰翔
粉丝 13
博文 5
码字总数 5403
作品 0
私信 提问
Guava库学习:学习Guava EventBus(一)EventBus

在软件开发过程中,对象信息的分享以及相互直接的协作是必须的,困难在于确保对象之间的沟通是有效完成的,而不是拥有成本高度耦合的组件。当对象对其他组件的责任有太多的细节时,它被认为是...

Realfighter
2014/12/29
0
0
为JFinal添加event消息事件

在之前使用spring mvc的时候,在复杂的下单和支付中有一部分功能使用的Spring事件驱动模型去完成!具体优点不啰嗦了,发现涛哥有篇文章讲得比较详细:[详解Spring事件驱动模型][1] 最初准备基...

如梦技术
2015/04/28
0
20
Android EventBus二三事

废话很多的前言 EventBus,也即事件总线。在[wiki][event_monitor]上有关于Event Monitor的一个说法: Event monitoring makes use of a logical bus to transport event occurrences from so......

苦辛味
2014/09/21
0
0
guava eventbus源码解析

说在前面 本文转自“天河聊技术”微信公众号 事件驱动模型设计是一种优雅的程序设计方式,实现有很多,原理都是发布与订阅,观察者设计模式实现,java自带的实现、spring ioc的事件驱动模型,...

天河2018
2018/07/07
0
0
EventBus 3.0使用详解

01 前言 当我们进行项目开发的时候,往往是需要应用程序的各组件、组件与后台线程间进行通信,比如在子线程中进行请求数据,当数据请求完毕后通过Handler或者是广播通知UI,而两个Fragment之...

天王盖地虎626
05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

状态模式

//相当把一个State对象存到Context对象中,然后通过Context实例化对象调用保存的state对象去调用state的相应的方法 https://blog.csdn.net/syc434432458/article/details/51210361...

南桥北木
22分钟前
3
0
基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

本文首发于:Jenkins 中文社区 使用 JaCoCo 统计功能测试代码覆盖率? 对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当...

Jenkins中文社区
29分钟前
4
0
聊聊Elasticsearch的OsProbe

序 本文主要研究一下Elasticsearch的OsProbe OsProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/os/OsProbe.java public class OsProbe { private static f......

go4it
29分钟前
1
0
谈谈lucene的DocValues特性之NumericDocValuesField

在默认实现的DocValuesCosumer中,数值有可能分块存储也有可能放在一个数据块中存储。 分块的大小默认是16384,并且通过预先计算如果按一个块存储最大值与最小值的差所占用的比特数和分块存储...

FAT_mt
48分钟前
2
0
【BATJ】面试必问MySQL索引实现原理

BATJ面试题剖析 1、为什么需要使用索引? 2、数据结构Hash、平衡二叉树、B树、B+树区别? 3、机械硬盘、固态硬盘区别? 4、Myisam与Innodb B+树的区别? 5、MySQL中的索引什么数据结构? 6、...

须臾之余
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部