使用spring自带的ApplicationEvent实现观察者模式

选择 Guava EventBus 还是 Spring Framework ApplicationEvent 如果正在开发Spring应用程序,或者需要与Spring框架的其他功能集成,那么可以使用Spring的ApplicationEvent来实现事件驱动的架构。Spring Framework 的 ApplicationEvent 是 Spring 框架提供的一种事件机制,用于实现发布和订阅事件的功能。它提供了一种简单而有效的机制,用于解耦组件之间的通信。通过使用 Spring 的 ApplicationEvent,开发人员可以实现更灵活、可扩展的应用程序架构,并在应用程序中使用事件驱动的编程范式。 阅读详情

1. 首先创建一个需要监听的事件,并继承ApplicationEvent,需要注意的是一定要重载构造函数

2. 使用applicationContext.publishEvent来发布事件,只有发布了事件才会监听到

3. 创建一个控制器

4. 使用@EventListener注解来实现监听

在postman中调用localhost:8078/bcs/user/register接口,会看到控制台打印出“监听事件成功”说明成功

一般我们用这种方式来实现代码解耦,比如说当用户注册成功后,我们会给用户发送短信和邮件。我们可以修改代码如下

需要注意的是这里监听的事件是UserEvent

控制台打印会发现是没有先后顺序的,但是我们需要先打印用户注册成功

在打印邮件和短信

SmartApplicationListener实现有序监听

实现SmartApplicationListener接口,并重写里面的方法

supportsEventType方法和supportsSourceType方法固定写法

调用localhost:8078/bcs/user/register接口

ApplicationListener实现监听

实现ApplicationListener接口,并重写方法

控制台打印

Spring中观察者模式的应用 观察者模式与发布订阅模式都用于对象间通信,但存在关键差异。观察者模式包含观察者和被观察者,被观察者直接通知观察者;而发布订阅模式通过经纪人(Broker)中介,发布者和订阅者完全解耦。在Spring框架中,事件驱动模型基于观察者模式实现,包含ApplicationEvent(事件)、ApplicationListener(监听器)、ApplicationEventPublisher(发布者)和ApplicationEventMulticaster(事件广播)四大核心组件。Spring提供了多种内置事件如Co 阅读详情

相关推荐

基于Spring ApplicationEvent的业务解耦实践

`ApplicationEvent` 是Spring框架提供的事件机制,它是观察者模式的经典实现。这一机制允许应用程序组件之间通过事件进行松散耦合的通信,发布者无需知道具体有哪些监听器在关注事件,监听者也不需要了解事件的具体来源。

九天的专栏 1070

Spring 事件框架 ApplicationEvent & 观察者模式(Publisher -> Listener)

Spring 事件框架 ApplicationEvent & 观察者模式(Publisher -> Listener)Event 事件机制概述事件机制在一些大型项目中被经常使用,于是 Spring 专门提供了一套事件机制的接口,方便我们运用。本文来说说 ApplicationEventPublisher 的使用。在设计模式中,观察者模式可以算得上是一个非常经典的行为型设计模式.ja...

AI天才研究院 9373

【Spring】Spring Boot 之事件(Event)ApplicationEvent

ApplicationContext 通过 ApplicationEvent 类和 ApplicationListener 接口进行事件处理。如果将实现 ApplicationListener 接口的 bean 注入到上下文中,则每次使用 ApplicationContext 发布 ApplicationEvent 时,都会通知该 bean。本质上,这是标准的观察者设计模式。

九师兄 2065

Spring中的事件讲解(Application Event)

文章目录1 Spring事件简介2 Demo示例2.1 pom.xml文件2.2 自定义事件2.3 事件监听器2.4 事件发布类2.5 配置类2.6 启动测试 1 Spring事件简介 当Spring的事件(Application Event)为Bean和Bean之间的消息同学提供了支持。当一个Bean处理完成一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要让另外一个Bean监听当前Bean所发生的事件 Spring的事件需要遵循如下流程: 自定义事件,继承ApplicationEv

上善若泪 1万+

使用 ApplicationEvent 和 Listener 快速实现业务解耦(观察者模式)

使用 ApplicationEvent 和 Listener 快速实现业务解耦(观察者模式)

Jaemon 531

《统计学习方法》——李航 学习大纲

最近在学习李航写的统计学习方法概论, 每一章都用xmind理清了思路,括号里是书里的公式,第一次写博文,敬请指教~~~~ 第一章 统计学习方法论 第二章 感知机 每个方法其实只需要着重掌握三要素和输入输出就可以了,主要看模型、策略和算法。 感知机主要是二类分类的线性分类模型。 看到后面会注意感知机和支持向量机的区别。 第三章 k近

wjy619251334的博客 1万+

Spring的ApplicationEvent

最近项目用到了observer观察者模式: event,listener是observer模式一种体现,这里我们介绍ApplicationEvent的使用。 一.PropertyAddedEvent继承ApplicationEvent 二.监听类PropertyEventHandler BookingEventsListener 需要实现ApplicationListener 并重写onAppli...

runoob12的博客 3366

从零到一:STM32 CubeMX与WS2812B的DMA驱动艺术

本文详细介绍了如何使用STM32 CubeMX和DMA技术驱动WS2812B RGB LED灯条,从硬件设计到软件实现的全过程。通过CubeMX配置定时器和DMA,实现高效的PWM波形生成与数据传输,解决传统GPIO控制资源占用高的问题。文章还提供了颜色编码、动画效果实现及常见问题解决方案,助力开发者快速掌握智能LED控制技术。

weixin_28278377的博客 977

Spring事件机制:ApplicationEvent

Spring事件机制 1. 事件机制 23种设计模式中的观察者模式,主要有观察者和被观察者两个角色,是一种对象间一对多依赖关系的实现,在软件设计中也被广泛使用。 Spring的事件机制也是通过这个模式驱动的,事件发布者是被观察者,事件中的监听者则是观察者,以 发布-订阅 模式实现。 2. 事件驱动 在跨进程之间,通常会采用 MQ(消息队列)来实现消息的发布和订阅,从而进行通信;在同一进程内,很多时候也可以使用事件驱动机制来进行逻辑和功能上的解耦,常见的比如注册、订单等。 public void regist

qq_43429919的博客 1593

ESP32C3的I2S接口详解:以驱动PCM5102A为例,避开时序与配置的那些坑

本文深入解析ESP32C3的I2S接口驱动PCM5102A DAC的完整解决方案,涵盖时序对齐、PCB优化和寄存器级配置。通过实际案例分享时钟树分析、信号完整性设计和底层调试技巧,帮助开发者避开常见陷阱,实现高质量音频输出。重点探讨了I2S协议栈、电源滤波优化及DMA传输异常处理等关键技术要点。

weixin_30254435的博客 298

大模型呼叫中心场景分享之六:大模型外呼IT运维告警——智能监控与自动化响应的未来

在数字化运维(IT Operations)中,实时监控系统健康状态并及时响应告警是保障业务连续性的关键。传统的IT告警方式(如邮件、短信、钉钉/企业微信通知)存在信息过载、响应延迟、人工处理效率低等问题。而大模型(LLM)与语音技术(TTS/ASR)的结合,为IT运维告警提供了更智能的解决方案——大模型外呼告警系统。大模型外呼告警系统正在重新定义IT运维的效率和体验。通过实时语音交互+智能自动化,企业能够将平均故障修复时间(MTTR)从小时级缩短至分钟级。

开源呼叫中心系统FreeIPCC的博客 920

Spring中ApplicationEvent事件的实现

新建一个类,继承applicationEvent使其成为事件类定义属性,类似实体属性,承载发布事件所传递的参数其中构造函数必须重写,且形参必须为Ojbect,内部调用super实例化事件类第一种方法,通过实现ApplicationListener接口内部重写onApplicationEvent方法,泛型参数需使用BuyEvent,形参才能修改为事件类,方便后续不使用向下转型(强转为BuyEvent)而调用事件的get set方法@Slf4j@Component@Override。

Zwwxd666的博客 1306

UE5热更新(通过Pak包加载关卡资源,并添加到流关卡)

请先阅读我上一篇文章)**

xialuhui的博客 6455

Spring 自带的观察者模式

1. 概述 在设计模式中,观察者模式是一个比较常用的设计模式。维基百科解释如下: FROM https://zh.wikipedia.org/wiki/观察者模式 观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。 此种模式通常被用来实时事件处理系统。 在我们日常业务开发中,观察者模式对我们很大的一个作用,在于实现业务的解耦。以用户注册的场景来举例子,假设在用户注册完成时,需要

Triple_kill的博客 1825

高级Salesforce开发面试题

自定义设置允许您创建自定义数据集,以及为组织、配置文件或特定用户创建和关联自定义数据。自定义元数据类似于自定义设置,但是自定义元数据类型中的记录被视为元数据而不是数据。自定义设置有列表和层次自定义设置两种。自定义元数据中没有此类类型。此外,自定义元数据不支持基于用户配置文件或特定用户的层次结构类型的数据。自定义设置现在不再支持关系字段。但您可以在自定义元数据对象之间创建查找。元数据查询不占用查询sql次数的限制。

weixin_45663522的博客 1237

【OpenAirInterface知识-3】OAI端到端部署之5G基站部署

在上一篇文章中已经完成了5G核心网的部署,本篇文章将介绍OAI 5G基站的部署过程。

起名字难上难的博客 3421

别再面向 for 循环编程了,Spring 自带的观察者模式就很香!

上一篇:JDK 自带的观察者模式就很香! 前段时间栈长给大家分享了什么是观察者模式,以及在 JDK 中如何实现观察者模式,现在都是 Spring 的天下了,今天就再分享下如何在 Spring/ Spring Boot 中实现观察者模式。 不用再面试 for 循环编程了,Spring 框架自带的事件监听机制,实现观察者模式、实现解耦轻松帮你全搞定! Spring 事件监听机制 其实在 Spring/ Spring Boot 框架中有一套事件监听机制,可以实现观察者模式。 Spring/ Spring Boot

Java技术栈,分享最主流的Java技术 1682

YOLOv8改进 | 独家创新篇 | 给YOLOv8增加辅助可逆分支结构(PGI,1:1改进)(全网独家创新,附视频讲解)

这张图(图3)展示了可编程梯度信息(PGI)及其相关网络架构和方法。这种网络结构主要用于改进特征融合,以提高目标检测的性能。然而,由于信息瓶颈的存在,网络中可能会丢失一些信息。这是一种旨在减少信息丢失的网络设计。它通过可逆的列结构来尝试维持信息流通不受损失,但如图中“Heavy Cost”所示,这种结构会增加计算成本。c) 深度监督:这种方法通过在网络的多个层次中插入额外的监督信号来提高学习的效率和最终模型的性能。图中显示了通过深度监督连接的各个层。

Snu77的博客 3741

【设计模式精讲】开源实战之剖析Spring框架:Spring中观察者模式的应用

在方法体中,可以通过不同对Event类的判断来进行相应的处理.当事件触发时所有的监听器都会收到消息,如果你需要对监听器的接收顺序有要求,可是实现该接口的一个实现SmartApplicationListener,通过这个接口可以指定监听器接收事件的顺序.事件机制的实现需要三个部分,事件源,事件,事件监听器,在上面介绍的ApplicationEvent就相当于事件,ApplicationListener相当于事件监听器,这里的事件源说的就是ApplicationEventPublisher.

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【事件监听器】Spring事件监听器ApplicationEvent

事件监听器,观察者模式的再度抽象。 解耦组件依赖,降低耦合度,增强代码扩展性和维护性,支持异步处理,提升系统性能,贴合 Spring 生态,集成便捷,灵活性高,支持事件过滤。Spring 事件监听器通过 “发布 - 订阅” 模式,从解耦、扩展性、性能、集成性等多个维度优化了组件交互方式,特别适合复杂业务场景下的模块化开发,是 Spring 生态中实现 “高内聚、低耦合” 设计的重要工具。

1934

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ApplicationEvent:观察者模式的spring实现

所以我们可以直接注入使用,也可以使用ApplicationContext,因为ApplicationContext本身就继承了ApplicationEventPublisher。定义监听类,使用@TransactionalEventListener注解定义事务阶段,因为使用了注解,就不用继承ApplicationListener接口。1、开发ApplicationEvent事件:要发送的消息体,这个一般要根据我们的实际业务进行封装,需要什么类型的数据,就是用什么类型,需要哪些字段就添加哪些字段。

qq_46055043的博客 407

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring源码系列(十)——ApplicationEvent事件机制源码分析

Spring源码系列(十)——ApplicationEvent事件机制源码分析

scorpio的博客 2896

观察者模式原理详解以及Spring源码如何使用观察者模式?

观察者模式核心:解耦主题与观察者,通过事件通知机制实现松耦合通信。Spring 实现:基于和构建事件驱动模型。应用场景业务流程解耦(如订单创建后发送通知、记录日志)。系统生命周期管理(如容器启动后加载缓存)。异步任务触发(如消息队列事件处理)。源码设计亮点事件类型匹配:通过动态解析事件类型,支持泛型事件。灵活广播策略支持同步/异步事件分发。注解驱动简化和@Async简化监听器定义与异步配置。

qq_39126115的博客 1623

基于 Spring 实现观察者模式

观察者模式又称为 发布-订阅模式,定义了对象之间一对多依赖关系,当目标对象(被观察者)的状态发生改变时,它的所有依赖者(观察者)都会收到通知。一个观察目标可以对应多个观察者,而这些观察者之间没有相互联系,所以能够根据需要增加和删除观察者,使得系统更易于扩展,符合开闭原则;并且观察者模式让目标对象和观察者松耦合,虽然彼此不清楚对方的细节,但依然可以交互,目标对象只知道一个具体的观察者列表,但并不认识任何一个具体的观察者,它只知道他们都有一个共同的接口。

yangyanping20108的博客 973

ApplicationEvent与ApplicationListener

前言: Spring的世界中有这么一对好基友,两个人总是同时出现,相爱相杀。这就是ApplicationEvent与ApplicationListener。感觉有点像小偷和警察,只要ApplicationEvent一出现,ApplicationListener就会发现TA。 下面我们就来看一个示例,是Spring官方文档提供的示例。 笔者大概说明一下这个示例的背景:就...

恐龙弟旺仔的博客 2532

Spring ApplicationEvent事件机制

ddddddddddd

qq_34508007的博客 353
上一篇: ubuntu系统下使用mycat实现分库分表(二)使用本地文件处理主键自增长
下一篇: ubuntu系统下使用mycat实现分库分表(三)使用时间戳处理主键自增长
若往夕之
博客等级 码龄9年 20粉丝 82原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值