3. 通过eventBus.post()方法发布事件,根据事件类型找到所有对应subcriber,遍历;然后由eventBus中的线程池执行订阅者中入参类型匹配的方法。 简单实用示例: 在springboot中,使用自动注入的方式来实现 目录结构: 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26...
EventBus 直译过来就是事件总线,它使用发布订阅模式支持组件之间的通信,不需要显式地注册回调,比观察者模式更灵活,可用于替换Java中传统的事件监听模式,EventBus的作用就是解耦,它不是通用的发布订阅系统,也不能用于进程间通信。可用于Android的EventBus库主要有这几个:Google出品的Guava,Guava是一个庞大的库,Event...
Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计。 不再多的废话,直奔Guava EventBus主题。首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的,官...
EventBus的executor为MoreExecutors.directExecutor(),其实现如下: 其execute方法直接执行线程的run方法,即同步调用run方法执行。EventBus的dispatcher为PerThreadQueuedDispatcher。其dispatch方法如下: dispatchEvent的实现如下: 因此,整个执行过程如下: 整个过程都是同步方式执行,因此,EventBus是同步的。 AsyncEventBus的dispa...
摘要EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 Observer模式是比较常用的设计模式之一,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但...
Guava EventBus EventBus 是Guava的一个发布订阅的模型,先看一个简单的实现: 定义一个Event的消息传递对象 代码语言:javascript 复制 publicclassTestEvent1{privatefinal int message;/** * 构造方法 * @param message */publicTestEvent1(int message){this.message=message;// System.out.println("TestEvent1 ...
1. EventBus类图 EventBus是同步实现 AsyncEventBus是异步实现 2. 代码实例 EventBus eventBus = new EventBus();eventBus.register(new Object() { @Subscribe public void listen(Object subReport) throws Exception { System.out.println("receive object event!");} @Subscribe public void listen(Integer ...
EventBus类是guava中关注消息的发布和订阅的类,简单的说订阅者通过EventBus注册并订阅事件,发布者将事件发送到EventBus中,EventBus将事件顺序的通知给时间订阅者,所以 这里面有一个重要的注意点,事件处理器必须迅速的处理,否则可能会导致时间堆积。 创建EventBus实例 ...
这里的identifier是一个字符串类型,类似于EventBus的id; subscribers是SubscriberRegistry类型的,实际上EventBus在添加、移除和遍历观察者的时候都会使用该实例的方法,所有的观察者信息也都维护在该实例中; executor是事件分发过程中使用到的线程池,可以自己实现; ...
Guava - EventBus(事件总线) EventBus 是Google.Guava提供的消息发布-订阅类库,它实现了观察者设计模式,消息通知负责人通过EventBus去注册/注销观察者,最后由消息通知负责人给观察者发布消息。 实战编码 下面将以EventBus为例,AsyncEventBus使用方式与其一致的。