当前位置:网站首页>Google EventBus 使用详解
Google EventBus 使用详解
2022-07-05 13:54:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
EventBus是Google.Guava提供的消息发布-订阅类库,它实现了观察者设计模式,消息通知负责人通过EventBus去注册/注销观察者,最后由消息通知负责人给观察者发布消息。
首先使用 maven 依赖:
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>示例代码:
EventBusCenter.java
package com.lance.google.event.bus;
import com.google.common.eventbus.EventBus;
/**
* Created by zhangzh on 2017/1/10.
*/
public class EventBusCenter {
private static EventBus eventBus = new EventBus();
private EventBusCenter() {
}
public static EventBus getInstance() {
return eventBus;
}
public static void register(Object obj) {
eventBus.register(obj);
}
public static void unregister(Object obj) {
eventBus.unregister(obj);
}
public static void post(Object obj) {
eventBus.post(obj);
}
}观察者一
package com.lance.google.event.bus;
import com.google.common.eventbus.Subscribe;
/**
* Created by zhangzh on 2017/1/10.
*/
public class DataObserver1 {
/**
* 只有通过@Subscribe注解的方法才会被注册进EventBus
* 而且方法有且只能有1个参数
*
* @param msg
*/
@Subscribe
public void func(String msg) {
System.out.println("String msg: " + msg);
}
}观察者二
package com.lance.google.event.bus;
import com.google.common.eventbus.Subscribe;
/**
* Created by zhangzh on 2017/1/10.
*/
public class DataObserver2 {
/**
* post() 不支持自动装箱功能,只能使用Integer,不能使用int,否则handlersByType的Class会是int而不是Intege
* 而传入的int msg参数在post(int msg)的时候会被包装成Integer,导致无法匹配到
*/
@Subscribe
public void func(Integer msg) {
System.out.println("Integer msg: " + msg);
}
}代码测试
Test.java
package com.lance.google.event.bus;
/**
* Created by zhangzh on 2017/1/10.
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
DataObserver1 observer1 = new DataObserver1();
DataObserver2 observer2 = new DataObserver2();
EventBusCenter.register(observer1);
EventBusCenter.register(observer2);
System.out.println("============ start ====================");
// 只有注册的参数类型为String的方法会被调用
EventBusCenter.post("post string method");
EventBusCenter.post(123);
System.out.println("============ after unregister ============");
// 注销observer2
EventBusCenter.unregister(observer2);
EventBusCenter.post("post string method");
EventBusCenter.post(123);
System.out.println("============ end =============");
}
}输出结果:
============ start ====================
String msg: post string method
Integer msg: 123
============ after unregister ============
String msg: post string method
============ end =============看使用起来简单吧!
EventBus的使用注意问题:
1.代码可读性很差,项目中使用的时候,从post的地方,查询handle使用,都是使用ide的搜索服务,问题很难定位,不如普通的接口调用方便查询;
2.由于EventBus是将消息队列放入到内存中的,listener消费这个消息队列,故系统重启之后,保存或者堆积在队列中的消息丢失。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149580.html原文链接:https://javaforall.cn
边栏推荐
- Summit review | baowanda - an integrated data security protection system driven by compliance and security
- Leetcode array question brushing notes
- 瑞能实业IPO被终止:年营收4.47亿 曾拟募资3.76亿
- 金融壹賬通香港上市:市值63億港元 葉望春稱守正篤實,久久為功
- Deep copy is hard
- Laravel - model (new model and use model)
- Selenium crawls Baidu pictures
- matlab学习2022.7.4
- Zibll theme external chain redirection go page beautification tutorial
- PHP basic syntax
猜你喜欢

国富氢能冲刺科创板:拟募资20亿 应收账款3.6亿超营收

Anchor navigation demo

我为什么支持 BAT 拆掉「AI 研究院」

IP packet header analysis and static routing

::ffff:192.168.31.101 是一个什么地址?

荐号 | 有趣的人都在看什么?

Can graduate students not learn English? As long as the score of postgraduate entrance examination English or CET-6 is high!

瑞能实业IPO被终止:年营收4.47亿 曾拟募资3.76亿

Ordering system based on wechat applet

【公开课预告】:视频质量评价基础与实践
随机推荐
ZABBIX monitoring
Zhubo Huangyu: these spot gold investment skills are not really bad
PHP basic syntax
神经网络物联网未来发展趋势怎么样
Solve the problem of "unable to open source file" xx.h "in the custom header file on vs from the source
LeetCode_67(二进制求和)
:: ffff:192.168.31.101 what address is it?
Linked list (simple)
asp. Net read TXT file
OSI and tcp/ip protocol cluster
Wonderful express | Tencent cloud database June issue
What is information security? What is included? What is the difference with network security?
鏈錶(簡單)
leetcode 10. Regular Expression Matching 正则表达式匹配 (困难)
锚点导航小demo
Scientific running robot pancakeswap clip robot latest detailed tutorial
Laravel框架运行报错:No application encryption key has been specified
物联网应用技术专业是属于什么类
matlab学习2022.7.4
[js] basic syntax - for loop