当前位置:网站首页>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
边栏推荐
- Log4j utilization correlation
- Apicloud studio3 WiFi real machine synchronization and WiFi real machine preview instructions
- Detailed explanation of IP address and preparation of DOS basic commands and batch processing
- Kafaka log collection
- Solve the problem of "unable to open source file" xx.h "in the custom header file on vs from the source
- Intranet penetration tool NetApp
- Basic characteristics and isolation level of transactions
- ZABBIX monitoring
- UE源码阅读[1]---由问题入手UE中的延迟渲染
- IP packet header analysis and static routing
猜你喜欢
Jetpack Compose入门到精通
Why do I support bat to dismantle "AI research institute"
UE source code reading [1]--- starting with problems delayed rendering in UE
How to deal with the Yellow Icon during the installation of wampserver
::ffff:192.168.31.101 是一个什么地址?
Redis6 master-slave replication and clustering
[public class preview]: basis and practice of video quality evaluation
国富氢能冲刺科创板:拟募资20亿 应收账款3.6亿超营收
神经网络物联网未来现状和趋势及看法
Simple process of penetration test
随机推荐
2022司钻(钻井)考试题库及模拟考试
Why do I support bat to dismantle "AI research institute"
Sqllab 1-6 exercise
asp.net 读取txt文件
Routing in laravel framework
那些考研后才知道的事
广发期货排名多少?网上办理广发期货开户安全可靠吗?
LeetCode_2(两数相加)
In addition to the root directory, other routes of laravel + xampp are 404 solutions
Basic characteristics and isolation level of transactions
Recommendation number | what are interesting people looking at?
Simple PHP paging implementation
laravel-dompdf导出pdf,中文乱码问题解决
Redis6 data type and operation summary
SSH免密码登录详解
The development of speech recognition app with uni app is simple and fast.
Jetpack Compose入门到精通
OSI and tcp/ip protocol cluster
【云资源】云资源安全管理用什么软件好?为什么?
搭建一个仪式感点满的网站,并内网穿透发布到公网 2/2