Guava Event Bus是干啥的
时间: 2025-06-08 07:22:37 浏览: 15
Guava Event Bus 是 Google 开发的一个轻量级事件发布/订阅框架,属于 Guava 库的一部分。它的主要作用是在程序内部组件之间建立松耦合的消息通信机制,通过将事件从生产者传递到消费者的方式替代传统的直接方法调用。
---
### 1. **核心概念**
- **Event (事件)**: 表示某个动作发生的信息包,例如按钮点击、数据变化等。
- **Producer (事件生产者)**: 负责创建和分发事件的模块或类。
- **Subscriber (事件订阅者)**: 注册对特定事件的兴趣,并在其感兴趣的事件到达时执行相应的处理逻辑。
通过 Guava Event Bus,开发者可以让不同的模块彼此独立地注册监听某类型的事件并在有该类型的新事件发出的时候自动得到通知而无需明确知道其他部分的存在位置甚至运行时刻状态。
---
### 2. **工作原理**
Guava EventBus 的工作机制非常简单直观:
1. 创建一个 `EventBus` 实例;
2. 让希望接收某些种类消息的对象把自己绑定到上述实例上(即成为 subscriber),同时指明它们各自关心哪些类别标签标记出来的信号源;
3. 发布方只需把新产生的事项投递给 bus 即可完成广播过程。
一旦某个符合条件的通知被post上去之后,所有对应的侦听器都会依次被执行一遍直到全部结束为止。
#### 简单例子演示
```java
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
public class SimpleExample {
static class MyMessage {
final String text;
MyMessage(String txt){
this.text = txt;
}
@Override
public String toString(){
return "MyMessage("+text+")";
}
}
static class ListenerOne{
@Subscribe
public void handleMessage(MyMessage msg) {
System.out.println("Listener One received : "+msg);
}
}
public static void main(String[] args) {
EventBus bus = new EventBus();
ListenerOne lsnr=new ListenerOne();
// 将listener添加进event bus
bus.register(lsnr);
// Post an event to the bus.
bus.post(new MyMessage("Hello World!"));
}
}
```
在这个简单的案例里我们先定义了一个叫做 `MyMessage` 的普通 java bean 来表示待传播的内容实体;然后又构造出了第二个名为 `ListenerOne` 的常规 pojo 类型并且赋予它一种能力去响应接收到的所有此类格式的数据流——这是借助于注释处理器 `@Subcribe` 才得以实现的功能特性。最后一步就是在入口点启动整个流程运转起来啦!
---
### 3. **特点与优势**
- **易于使用**: API 设计友好,仅需少量配置即可快速集成到项目当中。
- **低侵入性**: 不强制修改现有代码结构就能引入强大的异步通讯支持。
- **灵活性强**: 支持同步&异步两种模式切换自由选择满足各种应用场景需求。
- **线程安全**: 内置锁机制保证多线程环境下的稳定性表现良好。
---
### 4. **局限性**
虽然 Guava EventBus 很强大也很方便,但它也有一些不足之处需要注意:
- 缺乏优先级控制:所有的 listeners 都会按照未知顺序逐一调用一次。
- 错误处理较弱:如果任何一个 listener 抛出异常则停止后续进一步尝试但仍允许先前成功的部分生效结果保留下来不做回滚补偿措施之类的安排。
- 性能开销较大:相比起直接函数呼叫而言毕竟增加了一层间接中介环节必然伴随着额外的时间耗费代价存在。
综上所述,在实际应用过程中应根据具体情况合理评估后再做决策是否采纳此工具解决相应的问题痛点哦~
阅读全文
相关推荐



















