前言

我们监听事件之前要有事件源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事件侦听器学习记录的更多相关文章

  1. JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!

    一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...

  2. javascript中事件总结&通用的事件侦听器函数封装&事件委托

    前言: JAVASCRIPT与HTML之间的交互是通过事件来实现的.事件,就是文档或浏览器窗口中发生的一些特定交互瞬间.可以使用侦听器( 或处理程序 )来预定事件,以便事件发生时执行相应的代码.这种在 ...

  3. js事件流、事件处理程序/事件侦听器

    1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...

  4. Android事件侦听器回调方法浅谈

    http://developer.51cto.com/art/201001/180846.htm Android事件侦听器作为视图View类的接口,其中包含有不少回调方法,比如:onClick():o ...

  5. 052_末晨曦Vue技术_处理边界情况之程序化的事件侦听器

    程序化的事件侦听器 点击打开视频讲解更详细 现在,你已经知道了 $emit 的用法,它可以被 v-on 侦听,但是 Vue 实例同时在其事件接口中提供了其它的方法.我们可以: 通过 $on(event ...

  6. JAVA事件监听机制学习

    //事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...

  7. SSH基于Hibernate eventListener 事件侦听器的操作日志自动保存到数据库

    在spring xml配置文件中添加配置,包含:model.listener 在model中增加需要写入数据库对应表的model 在auditLog.xml配置文件中配置自己项目中,需要进行日志记录的 ...

  8. 【JavaScript代码实现二】通用的事件侦听器函数

    // event(事件)工具集,来源:github.com/markyun markyun.Event = { // 页面加载完成后 readyEvent : function(fn) { if (f ...

  9. java里的MouseLisetener接口的使用过程==========需要用组件是来注册侦听器

    总结:通过匿名类来实现鼠标的监听或者  通过实现接口的方法都可以的 从此是实现MouseListener接口的方式 package com.a.b; import java.awt.Color; im ...

  10. java事件监听机制(自定义事件)

    java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...

随机推荐

  1. 贝壳云P1刷机记录(5.10内核Armbian)

    说明 贝壳云基于瑞芯微的RK3328芯片, 芯片介绍, Cortex-A53架构, 4核, 1G内存, 8G eMMC. 板载1个千兆网口, 4个USB3.0. 这个盒子比较赞的地方就是不到百元的价格 ...

  2. redis大key分析工具redis-rdb-tools

    最近1台云Redis的内存曝高,24G的内存占用19G,而且一直增长,想看那些key比较大,腾讯云Redis有大key分析的结果,但是这台没有,估计要找腾讯云的技术刷新一下数据: 分析大key工具,有 ...

  3. 使用marquee标签实现文字滚动

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  4. C++ 多线程的错误和如何避免(13)

    在 async 任务中抛出的异常会被 std::future::get() 触发 #include <future> #include <iostream> int main( ...

  5. 【华为机试ACM基础#02】从单向链表中删除指定值的节点、输出单向链表中倒数第k个节点(熟悉链表的输入方式)

    从单向链表中删除指定值的节点 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针. 链表的值不能重复. 构造过程,例如输入一行数据为: 6 2 1 2 ...

  6. 【LeetCode二叉树#15】二叉搜索树中的众数(递归中序遍历)

    二叉搜索树中的众数 力扣题目链接(opens new window) 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假定 BST 有如下定义: 结点左子树 ...

  7. Simulink模型指标分析与模型重构的最佳实践 - 软件模型质量保证不可忽视的一环

    在基于模型的开发中,优质的模型架构是生成优质代码的必要前提.静态模型分析对于模型的质量保证有着至关重要的作用,同时建模规范已在业内有着广泛而成熟的应用.然而建模规范并非模型设计原则合规性的唯一考量标准 ...

  8. 04、Etcd中常见的概念

    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢. 上一章节,我们学习了 Etcdctl 的使用,从中窥探了 Etcd 的强大之处.从这一节开始,后面的内容基本上都是偏理论的东西,争取在看 ...

  9. 【Azure Redis 缓存】Redis性能指标之Server Load

    Server Load描述 在Redis的官方介绍中,Server Load指标是Redis 服务器忙于处理消息并且非空闲等待消息的周期百分比. 如果此计数器达到 100,则意味着 Redis 服务器 ...

  10. mysql数据库表或行,被锁,杀死进程

    -- 查询进行 SHOW PROCESSLIST; -- 删除进程 kill 22459; -- 查找正在进行的 select * from information_schema.innodb_trx ...