前言
EventBus能够简化各组件间的通信,让我们的代码书写变得简单,在实际项目中也是会有用到,微服务间使用 eventbus实现系统间解耦,本小节来学习一下基础
github地址:
https://github.com/greenrobot/EventBus (24k的star)
优点
- simplifies the communication between components
- decouples event senders and receivers
- performs well with Activities, Fragments, and background threads
- avoids complex and error-prone dependencies and life cycle issues
可以直接导入谷歌的guava包,也可以自行导入
<dependency>
<groupId>org.greenrobot</groupId>
<artifactId>eventbus-java</artifactId>
<version>3.3.1</version>
</dependency>
EventBus是一个观察者(发布-订阅)模式的实现
在需要发送事件的地方,调用EventBus的post(Object event),postSticky(Object event)来通知订阅者
@Slf4j
public class EventListener {
/**
* 该方法有且只有一个参数。
* 该方法必须是public修饰符修饰,不能用static关键字修饰,不能是抽象的(abstract)
* 该方法需要用@Subscribe注解进行修饰。
* @param event
*
* Subscribe 订阅人,订购者的意思
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
log.info("得到的envent的内容为 [{}]",event.getMessage());
System.out.println("测试一下");
}
}
public class EventBusExample {
public static void main(String[] args) {
MessageEvent messageEvent =new MessageEvent(1,"测试发布消息");
EventBus eventBus = new EventBus();
eventBus.register(new EventListener()); // 注册
eventBus.post(messageEvent); //发送消息
}
}
/**
* 其实这个类就是一个Bean类,里面定义用来传输的数据的类型
*/
@Data
public class MessageEvent {
private int type;
private String message;
public MessageEvent(int type, String message) {
this.type = type;
this.message = message;
}
}
执行得到的结果为:
待续..........
评论区