事件Event作为一种常用的线程通讯工具,在Springboot中可以方便地提供开发者进行线程交互。

1.事件定义

 1 import org.springframework.context.ApplicationEvent;
2
3 /**
4 * WebSocket触发事件定义
5 * @author : Asp1rant
6 * @date : 19-3-11 上午10:33
7 */
8
9 public class WebsocketMessageEvent extends ApplicationEvent {
10
11 public String username;
12 public String message;
13
14 public WebsocketMessageEvent(Object source, String username, String message){
15 super(source);
16 this.username = username;
17 this.message = message;
18 }
19 }

2.编写服务,编写时添加接口供外部调用发布

 1 import com.baosight.tos.util.event.WebsocketMessageEvent;
2 import org.springframework.beans.factory.annotation.Autowired;
3 import org.springframework.context.ApplicationContext;
4 import org.springframework.stereotype.Service;
5
6 /**
7 * Websocket事件服务
8 * @author : Asp1rant
9 * @date : 19-3-11 上午10:36
10 */
11
12 @Service
13 public class WebsocketMessageService {
14
15 @Autowired
16 ApplicationContext applicationContext;
17
18 public void pubWebsocketMessage(String username, String message){
19 applicationContext.publishEvent(new WebsocketMessageEvent(this, username, message));
20 }
21
22 }

3.事件监听,两种写法:

3.1 定义监听器

 1 import org.springframework.context.ApplicationListener;
2
3 public class WebsocketEventListener implements ApplicationListener<WebsocketMessageEvent> {
4
5 @Override
6 public void onApplicationEvent(WebsocketMessageEvent websocketMessageEvent){
7 System.out.println("监听到WebsocketMessageEvent事件");
8 try {
9 Thread.sleep(2000);
10 } catch (InterruptedException e) {
11 e.printStackTrace();
12 }
13 }
14
15 }

3.2 注解EventListener

1    @EventListener
2 public synchronized void WebsocketListener(WebsocketMessageEvent event){
3 System.out.println("监听到WebsocketMessageEvent事件");
4 }
5 }

Springboot中的事件Event的更多相关文章

  1. JavaScript -- 时光流逝(八):js中的事件Event的使用

    JavaScript -- 知识点回顾篇(八):js中的事件Event的使用 事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行. (1) onabort : onabort 事件会在图像 ...

  2. javascript中的事件Event

    一.事件流 1.事件流:描述的是从页面中接受事件的顺序 IE的事件流是事件冒泡流,Netscape的事件流是事件捕获流. 2.事件冒泡 IE的事件流叫做事件冒泡(event bubbing),即事件开 ...

  3. pythonl练习笔记——threading线程中的事件Event

    1 事件Event 使用方法:e = threading.Event() Event对象主要用于线程间通信,确切地说是用于主线程控制其他线程的执行. Event事件提供了三个方法:wait等待.cle ...

  4. 【Spring】9、Spring中的事件Event

    Spring的ApplicationContext 提供了支持事件和代码中监听器的功能. 我们可以创建bean用来监听在ApplicationContext 中发布的事件.ApplicationEve ...

  5. C#中的事件(event)处理机制

    委托 语法 [访问修饰符] delegate 返回类型 委托名(); 委托的特点 类似于C++函数指针,但它是类型安全的:委托允许将方法作为参数进行传递:委托可用于定义回调方法:委托可以链接在一起:如 ...

  6. libevent源码学习(9):事件event

    目录在event之前需要知道的event_baseevent结构体创建/注册一个event向event_base中添加一个event设置event的优先级激活一个event删除一个event获取指定e ...

  7. springboot 中事件监听模型的一种实现

    目录 定义事件本身 定义事件源 定义监听者 一.需要实现 ApplicationListener 二.使用 @EventListener 注解 测试 项目结构 前言: 事件监听模型是一种常用的设计模式 ...

  8. 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...

  9. JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target

    http://wenda.haosou.com/q/1373868839069215 http://kylines.iteye.com/blog/1660236 http://www.cnblogs. ...

随机推荐

  1. Python学习周末练习1-用户登录

    用户登录验证要求:1.用户登录输入账号.密码.4位随机大写字母验证码2.验证码错误重新输入3.有三次机会输入账号密码 count = 1 while count <= 3 : from rand ...

  2. 合并多个Excel

    合并excel分为两种情况:1.将多个excel文件合并在一个excel中的不同sheet中.2.将多个excel文件合并在一个excel文件的一个sheet中. 1.将多个excel的文件合并在一个 ...

  3. AutoCAD批量导出点坐标

    需求背景: 需要批量导出DWG文件中的散点树的位置信息,以Excel文件格式存储. 实现方法: 在AutoCAD2012打开dwg文件,点击“插入”选项卡中的“提取数据”工具(或输入DATAEXTRA ...

  4. day_45_Django

    day45 内容回顾 #### 1. HTTP协议 tcp/IP协议 HTTP特性: 无连接 请求--响应模式 请求格式 响应格式 Django相关 Django下载 命令行: pip install ...

  5. log4j的详细配置

    https://www.cnblogs.com/juddhu/archive/2013/07/14/3189177.html(原文链接) 先说下我的需求 1,可以记录日记在我们的java开发项目周期中 ...

  6. 原生js手动轮播图

    手动轮播图,为轮播图中的一种,轮播图主要有无缝轮播,手动轮播,延迟轮播,切换轮播等等... 轮播图主要用于展现图片,新出商品,词条,又能美观网页.給网页中增加动态效果. 手动轮播,是小编认为最简单的一 ...

  7. 以数之名:In Praise of APL 后记

    原文:http://www.jsoftware.com/papers/perlis77.htm 标题:In Praise of APL: A Language for Lyrical Programm ...

  8. 使用labelme制作自己的数据集

    # python3 conda create --name=labelme python=3.6 source activate labelme # conda install -c conda-fo ...

  9. Dynamic learning rate in training - 培训中的动态学习率

    I'm using keras 2.1.* and want to change the learning rate during training. I know about the schedul ...

  10. springboot解决文件上传大小限制

    (1)在配置文件(application.properties)加入如下代码 springboot2.0以下配置为: spring.http.multipart.maxFileSize = 10Mb ...