美文网首页Java 杂谈Java
Guava - EventBus(事件总线)

Guava - EventBus(事件总线)

作者: java面试笔试 | 来源:发表于2018-08-19 14:34 被阅读0次

Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计。

不再多的废话,直奔Guava EventBus主题。首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的,官方理由是并不想我们我们的使用方式。当然如果我们想其为单例,我们可以很容易封装它,一个单例模式保证只创建一个实例就对了。

下面将以EventBus为例,AsyncEventBus使用方式与其一致的。

订阅

首先EventBus为我们提供了register方法来订阅事件,Guava在这里的实现很友好,我们不需要实现任何的额外接口或者base类,只需要在订阅方法上标注上@Subscribe和保证只有一个输入参数的方法就可以搞定。这样对于简单的某些事件,我们甚至可以直接

newObject() {@Subscribepublicvoidlister(Integer integer){        System.out.printf("%d from int%n", integer);    }}

Guava发布的事件默认不会处理线程安全的,但我们可以标注@AllowConcurrentEvents来保证其线程安全

发布

对于事件源,则可以通过post方法发布事件。 正在这里对于Guava对于事件的发布,是依据上例中订阅方法的方法参数类型决定的,换而言之就是post传入的类型和其基类类型可以收到此事件。例如下例:

finalEventBus eventBus =newEventBus();eventBus.register(newObject() {@Subscribepublicvoidlister(Integer integer){        System.out.printf("%s from int%n", integer);    }@Subscribepublicvoidlister(Number integer){        System.out.printf("%s from Number%n", integer);    }@Subscribepublicvoidlister(Long integer){        System.out.printf("%s from long%n", integer);    }});eventBus.post(1);eventBus.post(1L);

在这里有 Integer,Long,与它们基类Number。我们发送一个整数数据的时候,或者Integer和Number的方法接收,而Long类型则Long类型和Number类型接受。

所以博主建议对于每类事件封装一个特定的事件类型是必要的。

DeadEvent

DeadEvent暂时不清楚怎么翻译更合意,它描述的是死亡事件,即没有没任何订阅者关心,没有被处理,以DeadEvent类型参数的方法表示.例如在上例中我们post一个Object类型,如下:

finalEventBus eventBus =newEventBus();eventBus.register(newObject() {@Subscribepublicvoidlister(DeadEvent event){        System.out.printf("%s=%s from dead events%n", event.getSource().getClass(), event.getEvent());    }});eventBus.post(newObject());

公众号:javafirst

相关文章

  • Guava - EventBus(事件总线)

    Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让...

  • Google Guava EventBus(事件总线)

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于...

  • Springboot 集成EventBus

    Guava的事件总线EventBus库是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本...

  • Guava 中EventBus事件总线模式

    一.事件总线模式的产生背景以及意义? 二.EventBus 如何使用? 三.EventBus 如何工作? 注册了订...

  • [Android组件解读] EventBus3.0解析

    记得前段时间讲解过otto事件总线的概念,但是大家习惯用的事件总线应该还是EventBus。 EventBus介绍...

  • eventBus源码解析

    EventBus定义:是一个发布 / 订阅的事件总线。 发布者,订阅者,事件,总线。 EventBus,可以说,就...

  • Vue的事件总线

    事件总线是什么? EventBus 又称为事件总线。在Vue中可以使用 EventBus 来作为沟通桥梁的概念,就...

  • EventBus和RxBus的使用

    EventBus介绍: Rx:函数响应式编程,EventBus:事件总线 。EventBus 功能类似handle...

  • vue 事件总线EventBus的概念、使用

    两个组件之间毫无关系,用到 vue 中的事件总线 EventBus的概念来传递数据 EventBus又称事件总线,...

  • 事件总线知多少(1)

    源码路径:Github-EventBus事件总线知多少(1)事件总线知多少(2) 1. 引言 事件总线这个概念对你...

网友评论

    本文标题:Guava - EventBus(事件总线)

    本文链接:https://www.haomeiwen.com/subject/foyciftx.html