当前位置:网站首页>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
边栏推荐
- 瑞能实业IPO被终止:年营收4.47亿 曾拟募资3.76亿
- js 从一个数组对象中取key 和value组成一个新的对象
- Attack and defense world crypto WP
- PostgreSQL Usage Summary (PIT)
- Linked list (simple)
- Zhubo Huangyu: it's really bad not to understand these gold frying skills
- Aikesheng sqle audit tool successfully completed the evaluation of "SQL quality management platform grading ability" of the Academy of communications and communications
- Intranet penetration tool NetApp
- Rk3566 add LED
- Can graduate students not learn English? As long as the score of postgraduate entrance examination English or CET-6 is high!
猜你喜欢
Getting started with rce
When using Tencent cloud for the first time, you can only use webshell connection instead of SSH connection.
ZABBIX monitoring
:: ffff:192.168.31.101 what address is it?
Internal JSON-RPC error. {"code":-32000, "message": "execution reverted"} solve the error
Data Lake (VII): Iceberg concept and review what is a data Lake
我为什么支持 BAT 拆掉「AI 研究院」
明峰医疗冲刺科创板:年营收3.5亿元 拟募资6.24亿
Redis6 transaction and locking mechanism
神经网络物联网未来发展趋势怎么样
随机推荐
Jetpack compose introduction to mastery
[cloud resources] what software is good for cloud resource security management? Why?
Ueditor + PHP enables Alibaba cloud OSS upload
【华南理工大学】考研初试复试资料分享
These 18 websites can make your page background cool
PHP generate Poster
[machine learning notes] several methods of splitting data into training sets and test sets
ZABBIX monitoring
鏈錶(簡單)
Brief introduction to revolutionary neural networks
Liste des liens (simple)
Apicloud studio3 WiFi real machine synchronization and WiFi real machine preview instructions
几款分布式数据库的对比
Blue Bridge Cup study 2022.7.5 (morning)
Jasypt configuration file encryption | quick start | actual combat
LeetCode_3(无重复字符的最长子串)
web3.eth. Filter related
Xampp configuring multiple items
Kafaka log collection
Jetpack Compose入门到精通