提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 概念
  • 1. 事件本身
  • 2. 发布事件的对象
  • 3. 接收事件的对象
  • 4. 验证结果

概念

使用EventBus(Guava提供的)可以实现事件的发布和监听,概念、效果和Spring的事件(可点击参看另一篇文章)很类似。

EventBus的事件机制是A调用一个发布事件的方法,就能自动调用B监听这个事件的方法,这个过程有3个对象:

  1. 事件本身,其实就是一个对象,这是一个普通的java类;
  2. 发布事件的对象,使用 EventBus 的 post 方法来发布,参数就是事件;
  3. 接收(或者叫监听)事件的对象,使用@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)相关推荐

  1. React Native 手势触摸事件机制详解(进阶篇)

    源码已开源到Github,详细代码可以查看:<React Native 触摸事件代码实践>. 在基础篇,对RN中的触摸事件做了详细的介绍.相信大家对于触摸事件流程机制有了更为清晰的认识.没 ...

  2. winform 让他间隔一段时间 执行事件 且只执行一次_Redis 事件机制详解

    点击上方"程序员历小冰",选择"置顶或者星标" 你的关注意义重大! Redis 采用事件驱动机制来处理大量的网络IO.它并没有使用 libevent 或者 li ...

  3. Redis 事件机制详解

    Redis 采用事件驱动机制来处理大量的网络IO.它并没有使用 libevent 或者 libev 这样的成熟开源方案,而是自己实现一个非常简洁的事件驱动库 ae_event. Redis中的事件驱动 ...

  4. Android事件机制详解

    转自:http://www.codeceo.com/article/android-event.html 1概述 在Android平台上,主要用到两种通信机制,即Binder机制和事件机制,前者用于跨 ...

  5. Spring事件机制详解

    一.前言 说来惭愧,对应Spring事件机制之前只知道实现 ApplicationListener 接口,就可以基于Spring自带的事件做一些事情(如ContextRefreshedEvent),但 ...

  6. 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容) – 叶小钗

    这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅,文中难 ...

  7. React Native 手势触摸事件机制详解(基础篇)

          欢迎大家关注[跨平台开发那些事]公众号,定期推送跨平台开发技术实践.        源码已开源到Github,详细代码可以查看:<React Native 触摸事件代码实践>. ...

  8. 十一、BIRT数据绑定与脚本,事件机制详解

    查看全文 http://www.taodudu.cc/news/show-5339056.html 相关文章: eclipse 安装birt插件 五.BIRT文本类报表 十.BIRT图表 第十二章 B ...

  9. JavaScript 运行机制详解(理解同步、异步和事件循环)

    1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...

最新文章

  1. 初中数学老师计算机培训反思,初中数学教师培训心得体会
  2. 剑指Offer #05 用两个栈实现队列(模拟)
  3. 四川省天然气行业发展战略及投资形势分析报告2021版
  4. CC2538相关资料
  5. 组装自己的tesla超级计算机
  6. 到达一个数 Reach a Number
  7. arduino扩展板的使用_如何使用Arduino和React为烧烤构建仪表板
  8. 一加7T Pro渲染图曝光:后置相机出乎意料
  9. 林业大学计算机专业排名2019,2019北京林业大学专业排名(4页)-原创力文档
  10. linux玩游戏无声音,Linux下LumaQQ 无声音的解决方法与播放电影
  11. mac 无法对计算机进行更改,解析深度技术win10 MAC不能修改的原因和解决成功的技巧...
  12. arduino 步进电机驱动库_arduino中驱动 步进电机
  13. 由OSS AccessKey泄露引发的思考
  14. 1000内不能被7整除的数
  15. Switchport详细用法
  16. 创新电影院:手机看电影时代已到来
  17. 2020年最强大脑第五期黑白迭代小游戏实现(Java)
  18. js+css实现鼠标点击时出现小心心
  19. java注解和反射原理_Java中的注解和反射
  20. 绿盟赛—鲲鹏软件迁移实践

热门文章

  1. 人工智能训练师的技能要求
  2. 微服务项目中引入全链路监控平台:Pinpoint、SkyWalking、Zipkin怎么选?
  3. 低代码开发-牛刀低代码和专业开发云 JNPF 3.4.7新版源码 旗舰版 /微服务、单体 、JAVA 版本
  4. Elasticsearch7.x DSL语法之查询
  5. 秒杀,在社群团购中这样玩……
  6. 软件测试-App测试流程及测试点
  7. 企业绩效管理体系优化方案
  8. win32API函数
  9. linux数字标牌,数字标牌操作系统中,Android、 Windows、Linux各自的优势在哪?
  10. MySQL数据库之数据查询