EventBus 事件机制详解(Google Guava)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 概念
- 1. 事件本身
- 2. 发布事件的对象
- 3. 接收事件的对象
- 4. 验证结果
概念
使用EventBus(Guava提供的)可以实现事件的发布和监听,概念、效果和Spring的事件(可点击参看另一篇文章)很类似。
EventBus的事件机制是A调用一个发布事件的方法,就能自动调用B监听这个事件的方法,这个过程有3个对象:
- 事件本身,其实就是一个对象,这是一个普通的java类;
- 发布事件的对象,使用 EventBus 的 post 方法来发布,参数就是事件;
- 接收(或者叫监听)事件的对象,使用@Subscribe注解的方法来处理接收的事件,这里需要注意提前将这个监听者注册到EventBus中;
1. 事件本身
对应3个对象中的第一个,如上所述,是一个普通的java类,如下:
package test.eventbus;public class EventBusMessage {private int age;public EventBusMessage(int age) {this.age = age;}public int getAge() {return age;}
}
2. 发布事件的对象
对应3个对象的第二个,使用 EventBus 的 post 方法来发布,参数就是事件 EventBusMessage ,如下:
package test.eventbus;import com.google.common.eventbus.EventBus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/test")
public class EventBusTestController {@Autowiredprivate EventBus eventBus; // 注意这里的EventBus是spring默认的单例@GetMapping("/pub-event")public void pub() {eventBus.post(new EventBusMessage(4));}
}
3. 接收事件的对象
对应3个对象的第三个,或者叫监听事件,就是使用@Subscribe注解的方法来处理接收的事件,这个方法的参数要和发布事件方法的参数一致,都是文中的 EventBusMessage ,还需要注意提前将这个监听者注册到EventBus中;
代码如下(示例):
package test.eventbus;import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component
public class EventBusListener {@Autowiredprivate EventBus eventBus; // 注意这里的EventBus是spring默认的单例,和发布事件的对象是同一个@PostConstructpublic void register() {eventBus.register(this);}@Subscribepublic void dealEvent(EventBusMessage event) {System.out.println("EventBusListener收到信息了,Mcdull 今年" + event.getAge() + "岁。");}
}
4. 验证结果
代码就这么多了,接下来,启动项目,请求"/test/pub-event",能看到如下输出:
EventBusListener收到信息了,Mcdull 今年4岁。
总的看来,使用还是很简单的。
EventBus 事件机制详解(Google Guava)相关推荐
- React Native 手势触摸事件机制详解(进阶篇)
源码已开源到Github,详细代码可以查看:<React Native 触摸事件代码实践>. 在基础篇,对RN中的触摸事件做了详细的介绍.相信大家对于触摸事件流程机制有了更为清晰的认识.没 ...
- winform 让他间隔一段时间 执行事件 且只执行一次_Redis 事件机制详解
点击上方"程序员历小冰",选择"置顶或者星标" 你的关注意义重大! Redis 采用事件驱动机制来处理大量的网络IO.它并没有使用 libevent 或者 li ...
- Redis 事件机制详解
Redis 采用事件驱动机制来处理大量的网络IO.它并没有使用 libevent 或者 libev 这样的成熟开源方案,而是自己实现一个非常简洁的事件驱动库 ae_event. Redis中的事件驱动 ...
- Android事件机制详解
转自:http://www.codeceo.com/article/android-event.html 1概述 在Android平台上,主要用到两种通信机制,即Binder机制和事件机制,前者用于跨 ...
- Spring事件机制详解
一.前言 说来惭愧,对应Spring事件机制之前只知道实现 ApplicationListener 接口,就可以基于Spring自带的事件做一些事情(如ContextRefreshedEvent),但 ...
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容) – 叶小钗
这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅,文中难 ...
- React Native 手势触摸事件机制详解(基础篇)
欢迎大家关注[跨平台开发那些事]公众号,定期推送跨平台开发技术实践. 源码已开源到Github,详细代码可以查看:<React Native 触摸事件代码实践>. ...
- 十一、BIRT数据绑定与脚本,事件机制详解
查看全文 http://www.taodudu.cc/news/show-5339056.html 相关文章: eclipse 安装birt插件 五.BIRT文本类报表 十.BIRT图表 第十二章 B ...
- JavaScript 运行机制详解(理解同步、异步和事件循环)
1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...
最新文章
- 初中数学老师计算机培训反思,初中数学教师培训心得体会
- 剑指Offer #05 用两个栈实现队列(模拟)
- 四川省天然气行业发展战略及投资形势分析报告2021版
- CC2538相关资料
- 组装自己的tesla超级计算机
- 到达一个数 Reach a Number
- arduino扩展板的使用_如何使用Arduino和React为烧烤构建仪表板
- 一加7T Pro渲染图曝光:后置相机出乎意料
- 林业大学计算机专业排名2019,2019北京林业大学专业排名(4页)-原创力文档
- linux玩游戏无声音,Linux下LumaQQ 无声音的解决方法与播放电影
- mac 无法对计算机进行更改,解析深度技术win10 MAC不能修改的原因和解决成功的技巧...
- arduino 步进电机驱动库_arduino中驱动 步进电机
- 由OSS AccessKey泄露引发的思考
- 1000内不能被7整除的数
- Switchport详细用法
- 创新电影院:手机看电影时代已到来
- 2020年最强大脑第五期黑白迭代小游戏实现(Java)
- js+css实现鼠标点击时出现小心心
- java注解和反射原理_Java中的注解和反射
- 绿盟赛—鲲鹏软件迁移实践