文档章节

Guava — EventBus

第二帅的人
 第二帅的人
发布于 2017/07/28 11:33
字数 445
阅读 26
收藏 0

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

http://www.cnblogs.com/whitewolf/p/4132840.html

 

http://blog.csdn.net/wzy_1988/article/details/38922449

© 著作权归作者所有

第二帅的人
粉丝 1
博文 45
码字总数 25831
作品 0
崇明
私信 提问
Guava库学习:学习Guava EventBus(一)EventBus

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

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

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

如梦技术
2015/04/28
1.1K
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
1.2K
0
guava eventbus源码解析

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

天河2018
2018/07/07
283
0
走近Guava(六): 事件总线EventBus

EventBus: 创建EventBus实例: EventBus eventBus = new EventBus();//或者EventBus eventBus = new EventBus(TradeAccountEvent.class.getName());//带标识符,用于日志记录 订阅事件: 模拟......

ihaolin
2014/04/05
2.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

spring-boot-maven-plugin not found的解决方案。

通过IDE创建一个springboot项目, <plugin> <groupId>org.springframework.boot</groupId>//这行红色 <artifactId>spring-boot-maven-plugin</artifactId>//这行红色</plugin> 提示sprin......

一片云里的天空
今天
52
0
OSChina 周三乱弹 —— 我可能是个憨憨

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @宇辰OSC :分享Hare Je的单曲《Alan Walker-Faded(Hare Je remix)》: #今日歌曲推荐# 可以放松大脑的一首纯音乐 《Alan Walker-Faded(Har...

小小编辑
今天
99
0
搞定SpringBoot多数据源(3):参数化变更源

春节将至,今天放假了,在此祝小伙伴们新春大吉,身体健康,思路清晰,永远无BUG! 一句话概括:参数化变更源意思是根据参数动态添加数据源以及切换数据源,解决不确定数据源的问题。 1. 引言...

mason技术记录
昨天
99
0
sql 基础知识

sql 基础知识 不要极至最求一条sql语句搞定一切,可合理拆分为多条语句 1. sql 变量定义与赋值 Sql 语句中,直接在SELECT使用@定义一个变量,如:[@a](https://my.oschina.net/a8856225a)。 ...

DrChenXX
昨天
57
0
MacOSX 安装 TensorFlow

TensorFlow是一个端到端开源机器学习平台。它拥有一个包含各种工具、库和社区资源的全面灵活生态系统,可以让研究人员推动机器学习领域的先进技术的。 准备 安装 Anaconda TensorFlow 安装的...

叉叉敌
昨天
79
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部