当前位置:网站首页>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
边栏推荐
- LeetCode_2(两数相加)
- Jetpack Compose入门到精通
- How to divide a large 'tar' archive file into multiple files of a specific size
- uplad_ Labs first three levels
- jasypt配置文件加密|快速入门|实战
- js 从一个数组对象中取key 和value组成一个新的对象
- 昆仑太科冲刺科创板:年营收1.3亿拟募资5亿 电科太极持股40%
- Summit review | baowanda - an integrated data security protection system driven by compliance and security
- Etcd database source code analysis -- rawnode simple package
- Linked list (simple)
猜你喜欢
瑞能实业IPO被终止:年营收4.47亿 曾拟募资3.76亿
Embedded software architecture design - message interaction
jasypt配置文件加密|快速入门|实战
How to deal with the Yellow Icon during the installation of wampserver
UE源码阅读[1]---由问题入手UE中的延迟渲染
Intranet penetration tool NetApp
Aikesheng sqle audit tool successfully completed the evaluation of "SQL quality management platform grading ability" of the Academy of communications and communications
Solve the problem of invalid uni app configuration page and tabbar
这18个网站能让你的页面背景炫酷起来
upload (1-6)
随机推荐
Jasypt configuration file encryption | quick start | actual combat
Apicloud studio3 WiFi real machine synchronization and WiFi real machine preview instructions
Wechat app payment callback processing method PHP logging method, notes. 2020/5/26
[machine learning notes] how to solve over fitting and under fitting
:: ffff:192.168.31.101 what address is it?
Scientific running robot pancakeswap clip robot latest detailed tutorial
Deep copy is hard
How to deal with the Yellow Icon during the installation of wampserver
redis6事务和锁机制
Liar report query collection network PHP source code
Xampp configuring multiple items
Self built shooting range 2022
研究生可以不用学英语?只要考研英语或六级分数高!
What is information security? What is included? What is the difference with network security?
Attack and defense world crypto WP
UE源码阅读[1]---由问题入手UE中的延迟渲染
Detailed explanation of IP address and preparation of DOS basic commands and batch processing
Summit review | baowanda - an integrated data security protection system driven by compliance and security
PHP basic syntax
Hide Chinese name