64.Spring事件监听的核心机制是什么?

news2024/9/24 18:18:54

Spring事件监听的核心机制是什么?

spring的事件监听有三个部分组成

  • 事件(ApplicationEvent) 负责对应相应监听器 事件源发生某事件是特定事件监听器被触发的原因
  • 监听器(ApplicationListener) 对应于观察者模式中的观察者。监听器监听特定事件,并在内部定义了事件发生后的响应逻辑
  • 事件发布器(ApplicationEventMulticaster )对应于观察者模式中的被观察者/主题, 负责通知观察者 对外提供发布事件和增删事件监听器的接口,维护事件和事件监听器之间的映射关系,并在事件发生时负责通知相关监听器。

Spring事件机制是观察者模式的一种实现,但是除了发布者和监听者者两个角色之外,还有一个EventMultiCaster的角
色负责把事件转发给监听者,工作流程如下:
在这里插入图片描述

也就是说上面代码中发布者调用applicationEventPublisher.publishEvent(msg); 是会将事件发送给了EventMultiCaster, 而后由
EventMultiCaster注册着所有的Listener,然后根据事件类型决定转发给那个Listener

扩展

Spring 的监听机制是非常优秀的思想,它能够很好地实现代码解耦,将业务逻辑与非业务逻辑分离,让程序变得更加灵活和可维护。在业务开发中,我们

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1397236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0.96寸OLED-单独驱动和U8g2驱动-硬件软件IIC

0.96寸OLED-单独驱动和U8g2驱动-硬件软件IIC 博主平时DIY经常使用OLED,其中以4脚的I2C屏最多,就想着总结一下子,让广大DIY朋友更容易找到资源。 驱动采用的时SSD1306 同学们拿到代码后,可以直接用,其中博主给的代码默认…

MySQL面试总结

MySQL优化 1.MySQL如何定位慢查询 1.1开源工具 1.2MySQL自带慢日志 1.3解答 2.EXPLAIN 2.1解答 3.什么是索引 4.B树 4.1数据结构对比 5.聚簇索引(聚集索引) 6.覆盖索引 7.索引创建原则 8.什么情况下索引失效 9.你对sql优化经验 10.事务 11.MVCC 11.主从…

bgp--大AS分小AS

最后效果:r1能ping通r8,r4路由表有r1-r8环回,r4bgp路由表已优化 代码; [r1] ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 1.1.1.1 0.0.0.0 network 12.1.1.1 0.0.0.0 bgp 64512 router-id 1.1.1.1 confederation id …

Qt/QML编程之路:OpenGL的示例(39)

Qt编程之后,会发现有版本问题,有时候一个示例不同的版本下可能会跑不同,有些Qt5跑不同Qt6已经完善,可以跑通。 我就看到有个关于OpenGL的示例: 这个示例是演示怎么基于OpenGL编程的,但是调试时却发现glViewXXX等gl打头的函数说找不到reference,或者什么link不上之类的错…

nvm-nodejs版本控制工具(window操作系统)

一、概述 可以在电脑上同时安装多个nodejs版本,随意切换使用; 二、下载和安装mvn 参考:window操作系统安装多个版本的nodejs——nodejs版本控制工具nvm_windows node多版本共存-CSDN博客 1. 下载 官网地址:https://github.com…

java数组在多线程中安全问题,HashMap是不安全的,Hashtable安全(但每次都加锁,效率低),ConcurrentHashMap完美

package com.controller;import com.myThread.AdminThread; import com.myThread.MyCallable; import com.myThread.MyRunnable; import org.springframework.web.bind.annotation.*;import java.util.concurrent.*; //上面引入*,所以这个可以注销 //import java.ut…

Java中锁的分类

乐观锁、悲观锁 乐观锁:不加锁的并发操作是安全的 可重入锁 RerntrantLock 当一个线程进入到一个同步方法中,然后在此方法中要调用另一个同步方法, 而且两个方法公用同一把锁 此时线程是可以进入到另一个同步方法中的。 读写锁 Reent…

LabVIEW继电保护测试仪自动检测系统

系统是LabVIEW软件平台和STM32F407系列微控制器的融合,提供了一种高效的解决方案,用于继电保护测试仪的自动化控制和数据采集。系统中使用了福禄克8508A型高精度数字多用表和泰克TDS2024型示波器等设备,以确保测试数据的准确性和可靠性。软件…

macOS安装VMware Fusion 13试用版本

1.下载: Download VMware Fusion | VMware 保存到桌面 下载成功: 双击dmg文件运行安装 安装成功 <

JVM篇--垃圾回收高频面试题

JVM垃圾回收 1 简单说下Java垃圾回收机制&#xff1f; 首先在java运行过程中&#xff0c;其实程序员并不需要去显示的调用程序来释放对象的内存&#xff0c;而是由虚拟机来完成的&#xff0c;具体来看是在jvm中有个垃圾回收线程&#xff0c;这个线程是个守护线程&#xff0c;…

LeeCode 42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1]…

HarmonyOS NEXT 既是大势所趋,也是“众望所归”,2024你如何选择?

鸿蒙开发最近两个月估计是程序员圈的焦点话题。自从业内人事传出2024鸿蒙HarmonyOS Next版不在兼容安卓后,紧接着余承东高调宣布’’2024年将是原生鸿蒙的关键一年’’,再加上各大厂陆续宣布拥抱鸿蒙生态&#xff0c;使的相关话题就没停过。 01、鸿蒙系统到底是个啥 俺简单来…

HarmonyOS【应用服务开发】在模块中添加Ability

Ability是应用/服务所具备的能力的抽象&#xff0c;一个Module可以包含一个或多个Ability。应用/服务先后提供了两种应用模型&#xff1a; FA&#xff08;Feature Ability&#xff09;模型&#xff1a; API 7开始支持的模型&#xff0c;已经不再主推。Stage模型&#xff1a;AP…

C 语言->编译和链接实现原理

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 今天学习&#xff1a;浅学编译和链接内部实现原理 前提&#xff1a;本文是在gcc编译环…

使用 Picocli 开发 Java 命令行,5 分钟上手

大家好&#xff0c;我是鱼皮&#xff0c;对不会前端的同学来说&#xff0c;开发 命令行工具 是一种不错的展示系统功能的方式。在 Java 中开发命令行工具也很简单&#xff0c;使用框架&#xff0c;几分钟就能学会啦~ Picocli 入门 Picocli 是 Java 中个人认为功能最完善、最简单…

网工内推 | 网络工程师,CCNP认证优先,带薪年假,补贴多

01 极三科技 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、门店网络运维 2、门店网络项目支持 3、配合店铺Support team处理网络相关问题 任职要求&#xff1a; 1、大专及以上相关学历 2、3年以上相关工作经验 3、精通Cisco 路由器&#xff0c;交换机配置 4…

2.4G收发芯片遥控玩具方案开发,解决方案

2.4G遥控玩具是指通过2.4GHz无线信号进行遥控的玩具。这种玩具通常包括遥控器和遥控车、挖机、飞机、船等各种类型的模型。使用2.4G频段的遥控器可以提供更稳定和可靠的信号传输&#xff0c;具有较长的控制距离和较低的干扰。相比之前使用的其他频段的遥控器&#xff0c;2.4G遥…

前台vue配置

前台 vue环境 1.傻瓜式安装node: 官网下载&#xff1a;https://nodejs.org/zh-cn/2.安装cnpm: >: npm install -g cnpm --registryhttps://registry.npm.taobao.org3.安装vue最新脚手架: >: cnpm install -g vue/cli注&#xff1a;如果2、3步报错&#xff0c;清除缓…

第11章 GUI Page500~504 步骤三十二:打开画板文件02

各个图元类新增GetTypeName_Static()&#xff0c;并将原来的GetTypeName()改为调用静态方法实现&#xff1a; 直线&#xff1a; 圆&#xff1a; 十字&#xff1a; 矩形&#xff1a; 文字&#xff1a; tool_4_save_load.hpp添加两行 tool_4_save_load.cpp增加&#xff1a; 增加…