Java事件侦听器学习记录
前言
我们监听事件之前要有事件源source,创建事件源(Event),发布事件(publishEvent),然后才能到监听事件。
事件驱动机制是观察者模式(称发布订阅)具体实现,事件对象(Event)相当于被观察对象(Subject), 事件监听(EventListener) 相当于观察者(Observer)
1、包结构(个人):

2、创建事件源(Event)
@Getter
public class CustomEvent extends ApplicationEvent { private String message; public CustomEvent(Object source, String message) {
super(source);
this.message = message;
} }
3、发布事件(publishEvent)
@Api(tags = "测试事件侦听器")
@RestController
@RequestMapping("/listen")
public class ListenController {
@Resource
private ApplicationEventPublisher publisher; @GetMapping("/test")
@ApiOperation(value = "测试事件侦听器")
// @Transactional(rollbackFor = Exception.class)
public Result<?> test() {
CustomEvent event = new CustomEvent(this, "test msg");
System.out.println(Thread.currentThread().getName());
publisher.publishEvent(event);
return Result.ok();
}
}
4. 监听事件,两种方式:
4.1 注解@EventListener方式监听事件:
在方法上添加@EventListener注解,即可监听
@Component
public class CustomEventListener { @EventListener
// @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
public void handleEvent(CustomEvent event){
System.out.println("recevied msg:" + event.getMessage());
System.out.println(Thread.currentThread().getName());
}
}
4.2 实现ApplicationListener接口监听事件
实现ApplicationListener接口,泛型既是需要添加的事件对象
@Component
public class CustomEventListener implements ApplicationListener<CustomEvent> { @Override
public void onApplicationEvent(CustomEvent event) {
System.out.println("recevied msg:" + event.getMessage());
System.out.println(Thread.currentThread().getName());
}
}
5. 事件驱动机制和RabbitMQ驱动机制对比
RabbitMQ驱动:
- 作用:解耦、异步、削峰,就不过多解释了。
- 优点:MQ可供并发量大、微服务使用
- 缺点:使用MQ会提升架构的复杂度,维护性降低。
事件驱动机制:
- 解耦、异步,做不到削峰。
- 优点:spring框架自带易维护,集成简单
- 缺点:无法支撑大并发,只能单机通知,无法排队,无法削峰。
总结:消息量不大时就可以使用事件驱动机制
Java事件侦听器学习记录的更多相关文章
- JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!
一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...
- javascript中事件总结&通用的事件侦听器函数封装&事件委托
前言: JAVASCRIPT与HTML之间的交互是通过事件来实现的.事件,就是文档或浏览器窗口中发生的一些特定交互瞬间.可以使用侦听器( 或处理程序 )来预定事件,以便事件发生时执行相应的代码.这种在 ...
- js事件流、事件处理程序/事件侦听器
1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...
- Android事件侦听器回调方法浅谈
http://developer.51cto.com/art/201001/180846.htm Android事件侦听器作为视图View类的接口,其中包含有不少回调方法,比如:onClick():o ...
- 052_末晨曦Vue技术_处理边界情况之程序化的事件侦听器
程序化的事件侦听器 点击打开视频讲解更详细 现在,你已经知道了 $emit 的用法,它可以被 v-on 侦听,但是 Vue 实例同时在其事件接口中提供了其它的方法.我们可以: 通过 $on(event ...
- JAVA事件监听机制学习
//事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...
- SSH基于Hibernate eventListener 事件侦听器的操作日志自动保存到数据库
在spring xml配置文件中添加配置,包含:model.listener 在model中增加需要写入数据库对应表的model 在auditLog.xml配置文件中配置自己项目中,需要进行日志记录的 ...
- 【JavaScript代码实现二】通用的事件侦听器函数
// event(事件)工具集,来源:github.com/markyun markyun.Event = { // 页面加载完成后 readyEvent : function(fn) { if (f ...
- java里的MouseLisetener接口的使用过程==========需要用组件是来注册侦听器
总结:通过匿名类来实现鼠标的监听或者 通过实现接口的方法都可以的 从此是实现MouseListener接口的方式 package com.a.b; import java.awt.Color; im ...
- java事件监听机制(自定义事件)
java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...
随机推荐
- Dubbo本地调试方法
方法一:用版本号来区分 比如,开发环境上跑的服务版本是1.0.0,那么为了在本地打断点调试某个服务,可以在本地启动,将version设置为2.0.0 服务提供者 @DubboService(versi ...
- 【framework】DisplayContent简介
1 前言 DisplayContent 用于管理屏幕,一块屏幕对应一个 DisplayContent 对象,虽然手机只有一个显示屏,但是可以创建多个 DisplayContent 对象,如投屏时, ...
- 【OpenGL ES】光影(光照与阴影)效果
1 前言 Blinn改进的冯氏光照模型 中只展示了光照效果,本文将进一步展示阴影效果. 绘制阴影,需要用到深度纹理,即从光源角度看模型并绘制一张纹理图,纹理图的颜色代表了模型上的点离光源的深度 ...
- springboot集成腾讯cos实现文件上传
腾讯对象存储介绍 对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性.低成本.可靠安全等优点.通过控制台.API.SDK 和工具等 ...
- mybatis处理集合、数组参数使用in查询
对于mybatis的参数类型是集合数组的时候进行查询. 第一种:参数list ,使用mybatis的标签 1 SELECT * FROM TABLE_NAME AS a WHERE 2 3 a.id ...
- @staticmethod/@classmethod/实例方法/@abstractmethod
from abc import ABCMeta, abstractmethod # 定义一个抽象类 class Person(metaclass=ABCMeta): name = "泰山&q ...
- JVM运行时参数
JVM运行时参数 JVM运行时参数是用于配置和调整Java虚拟机的行为和性能的参数.这些参数可以在启动Java应用程序时通过命令行或配置文件进行设置,合理配置参数可以使JVM虚拟机的达到更好的性能,降 ...
- 【Azure Developer】Visual Studio 2019中如何修改.Net Core应用通过IIS Express Host的应用端口(SSL/非SSL)
问题描述 在VS 2019调试 .Net Core Web应用的时,使用IIS Express Host,默认情况下会自动生成HTTP, HTTPS的端口,在VS 2019的项目属性->Debu ...
- C#的Winform程序关于单击和双击的区别 - 开源研究系列文章
前些天编码的时候有个关于应用程序的托盘图标的鼠标Mouse Down里的单击和双击的问题,只是想单击的时候显示主窗体,双击的时候显示操作窗体.但是编码并调试的时候发现Windows的鼠标双击的事件先执 ...
- Java 构造器(构造方法)练习
1 package com.bytezero.triangle; 2 3 public class TriAngle 4 { 5 //私有属性 6 private double base; //边长 ...