SpringBoot+EventBus使用教程(一)
一、简介
EventBus是一个基于发布订阅的事件总线,在Java和Android里都可以使用。
二、使用
1.引入pom
<dependency>
<groupId>org.greenrobot</groupId>
<artifactId>eventbus</artifactId>
<version>3.1.1</version>
</dependency>
2.定义事件监听类
@Component
@Slf4j
public class EventListener {
@Subscribe
public void onMessageEvent(String event) {
log.info("Subscribe message:{}", event);
}
}
3.EventBusConfig
@Configuration
public class EventBusConfig { @Bean
public EventBus eventBus(){
return new EventBus();
} }
4.EventHandler
@Component
@Slf4j
public class EventHandler { @Autowired
private EventBus eventBus; @Autowired
private EventListener eventListener; @PostConstruct
public void init() {
eventBus.register(eventListener);
} @PreDestroy
public void destroy() {
eventBus.unregister(eventListener);
} public void eventPost(){
eventBus.post("test");
log.info("post event");
}
}
5.测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class EventBusTest { @Autowired
private EventHandler eventHandler; @Test
public void postEvent(){
eventHandler.eventPost();
} }
6.运行结果
2019-11-01 22:33:24.657 INFO 6656 --- [ main] com.sww.bizhi.eventbus.EventListener : Subscribe message:test
2019-11-01 22:33:24.671 INFO 6656 --- [ main] com.sww.bizhi.eventbus.EventHandler : post event
三、自定义事件
上面的例子,我们发送和接收的都是string,如果我想event是个bean,怎么操作?
1.添加MessageEvent类
@Data
@Builder
public class MessageEvent { private Integer id;
private String name; }
2.修改EventHandler里的eventPost方法(红色字体部分)
public void eventPost(){
eventBus.post(MessageEvent.builder().id(1).name("test").build());
log.info("post event");
}
3.修改EventListener类里的onMessageEvent方法(红色字体部分)
@Subscribe
public void onMessageEvent(MessageEvent event) {
log.info("Subscribe message:{}", event);
}
4.运行测试类,查看结果
2019-11-01 22:53:24.273 INFO 2252 --- [ main] com.sww.bizhi.eventbus.EventListener : Subscribe message:MessageEvent(id=1, name=test)
2019-11-01 22:53:24.278 INFO 2252 --- [ main] com.sww.bizhi.eventbus.EventHandler : post event
四、最后
本篇初步介绍了如何在springboot里使用eventbus,下一篇文章将介绍如何集成spring-boot-starter-guava-eventbus
EventBus地址:https://github.com/greenrobot/EventBus
另外,本篇教程使用了lombok插件。
本文系本人原创,同步更新在我的独立博客http://791202.com/上,如要转载,请注明出处!
SpringBoot+EventBus使用教程(一)的更多相关文章
- SpringBoot+EventBus使用教程(二)
简介 继续上篇,本篇文章介绍如何集成spring-boot-starter-guava-eventbus使用EventBus,最新的版本好像已经不叫spring-boot-starter-guava- ...
- 初识springboot(傻瓜式教程)
初识springboot(傻瓜式教程) 项目所需的版本 IDEA 2018 maven 3.x jdk-1.8 IDEA创建spring-boot项目(maven方法) 1.创建一个maven工程 点 ...
- 很详细的SpringBoot整合UEditor教程
很详细的SpringBoot整合UEditor教程 2017年04月10日 20:27:21 小宝2333 阅读数:21529 版权声明:本文为博主原创文章,未经博主允许不得转载. https: ...
- springboot+shiro整合教程
进阶教程: 1. springboot+shiro+redis(单机redis版)整合教程 2. springboot+shiro+redis(集群redis版)整合教程 3.springboot+s ...
- 千锋很火的SpringBoot实战开发教程视频
springboot是什么? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...
- SpringBoot之入门教程-SpringBoot项目搭建
SpringBoot大大的简化了Spring的配置,把Spring从配置炼狱中解救出来了,以前天天配置Spring和Mybatis,Springmvc,Hibernate等整合在一起,感觉用起来还是挺 ...
- SpringBoot整合Guacamole教程
前言 本文主要介绍的是SpringBoot如何整合Guacamole在浏览器是远程桌面的访问. Guacamole 介绍 Apache Guacamole 是一个无客户端远程桌面网关.它支持标准协议, ...
- 《Springboot极简教程》问题解决:Springboot启动报错 Whitelabel Error Page: This application has no explicit mapping for(转)
13.2 Spring Boot启动报错:Whitelabel Error Page 13.2 Spring Boot启动报错:Whitelabel Error Page 问题描述 Whitelabe ...
- EventBus使用教程
如图准备工作: 父子(子父)组件触发 EventBus.$emit('sub') EventBus.$on('sub',()=>{ console.log(1111222232211122) } ...
随机推荐
- kali渗透综合靶机(十)--Raven靶机
kali渗透综合靶机(十)--Raven靶机 一.主机发现 1.netdiscover -i eth0 -r 192.168.10.0/24 二.端口扫描 1. masscan --rate=1000 ...
- 来迟了,用Python助你叠猫猫,抢618大红包!
目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 逛店铺流程回顾 5 代码全景展示 6 总结 0 引言 最近叠猫猫的活动可真是十分的火爆,每天小伙伴们为了合猫猫忙的可谓是如火如荼.为啥要叠猫 ...
- C#学习之委托与事件
委托 语法: public delegate void MyDelegate(); 使用: 1.定义委托----public delegate void MyDelegate(); 2.注册委 ...
- JZOJ.2117. 【2016-12-30普及组模拟】台风
题目大意: 天气预报频道每天从卫星上接受卫星云图.图片被看作是一个矩阵,每个位置上要么是”#”,要么”.”,”#”表示该位置没有云,”.”表示有云,地图上每个位置有多达8个相邻位置,分别是,左上.上. ...
- git did not exit cleanly (exit code 1) 的解决办法
问题描述: 关于Git的使用,在通常情况下,习惯于先在本地创建一个本地仓库,然后将项目提交到本地master,再将本地master中的项目Push 到远程仓库中,这样问题就来了. 具体错误信息如下: ...
- curl sftp libcurl 功能使用
#include <curl/curl.h> #undef DISABLE_SSH_AGENT struct FtpFile { const char *filename; FILE *s ...
- Qt压缩和解压 zip
zlib编译详见 https://blog.csdn.net/zhangxuechao_/article/details/85049711 下载quazip https://github.com/st ...
- [b0017] python 归纳 (三)_类名当参数传入
# -*- coding: UTF-8 -*- """ 测试传入类名 总结: 似乎python里面的一切东西都可以当参数传入 函数或者方法 ""&qu ...
- idea把菜单栏给点没了...(File、Edit、View、Navigate.......)
第一种方法 找到idea的C盘的配置文件ui.lnf.xml文件 第二种方法 如果是高版本idea,我的是2019.3,双击shift选择Actions,搜索menu 然后重启idea
- [linux] 多进程和多线程
1.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段.堆栈段和数据段,这是一种”昂贵”的多任务工作方式.2.而运行于一个进程中的多个线程,它们彼此之间使 ...