1、eventbus是基于注册监听的方式来运行的,因此,首先需要将eventbus,然后才会有事件及监听者。新建eventbus或者AsyncEventBus的方式如下: 或者 2、注册监听者。 底层就是将类eventListener中所有注解有Subscribe的方法与其Event对放在一个map中(一个event可以对应多个Subscribe的方法)。实现如下: 3、事件发送:执行指定事...
Guava事件总线(EventBus)是Google Guava库中的一个组件,它实现了发布-订阅模式的事件总线机制。事件总线允许服务内部的组件之间进行松散的发布-订阅式通信,从而实现了组件间的解耦。通过事件总线,组件可以在不直接相互引用的情况下进行通信,提高了系统的可扩展性和可维护性。 2. Guava事件总线的工作原理 Guava事件总线...
意思是说AsyncEventBus就是EventBus,只不过AsyncEventBus使用你指定的线程池(不指定使用默认线程池)去分发事件(Event),并且是异步进行的。 **AsyncEventBus总结** - 1.异步执行,事件发送方异步发出事件,不会等待事件消费方是否收到,直接执行自己后面的代码。 - 2.在定义AsyncEventBus时,构造函数中会传入一个线程...
EventBus的整体使用方式如下图所示,基于Event的驱动来实现Publisher和Subscriber之前的通信。 EventBus用法 publicclassGuavaTest{publicstaticvoidmain(String[]args){// 1、定义EventBus对象EventBuseventBus=newEventBus();// 2、定义两个观察者对象DataObserver1observer1=newDataObserver1();DataObserver2observer2=n...
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方...
观察者模式(Observer)用于解决上述问题,EventBus就是该模式的一个实现,它是Google Guava提供的一个组件。 EventBus使用“发布—订阅”的通信模式,使得系统(进程)内各个组件之间无需相互显式引用即可完成事件分发或消息通信,如下图所求: 它的设计结构非常符合观察者模式, ...
实际上EventBus的原理不算很麻烦, 1、首先它会在注册的时候,通过反射将被注册类中所有的 有 @Subscribe 注解的方法以k-v的形式(k是方法的参数类型(Type),v是Method对象) 存储在Multimap里面(就当做一个map就好)。 2、然后在post的时候,会通过反射获取post方法参数的Type,然后再去Multimap里面比对,获取Method。
2.3 Event发布原理 事件发布时,EventBus会获取事件的超类,然后调用分发器进行分发。ImmediateDispatcher在接收到事件后立即通知感兴趣的订阅者;PerThreadQueuedDispatcher在同一个线程中保证事件按顺序执行;LegacyAsyncDispatcher在不同线程中并发执行事件。3. 使用指导 在使用EventBus时,应避免在PostConstruct...
package google.event; import com.google.common.eventbus.Subscribe; import org.example.PrintUtils; public class Event1Handler { @Subscribe public void handleEvent(Event1 event) { PrintUtils.printWithTime("Event1Handler ~~~"); PrintUtils.printWithTime(event.toString()); }...