Spring:ApplicationEventPublisher事件发布与监听

ApplicationEventPublisher事件发布-监听 事件发布监听 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

一、概述

Spring的事件机制是观察者模式的典型,跟发布订阅模式也十分接近,被观察者发布事件,观察者监听到事件,然后处理事件。这个模式的应用场景有用户注册等,比如用户注册后需要给用户发送优惠券,这时用户注册就是被观察者,事件是发送优惠券。

二、实现

1、事件

首先需要定义事件,继承ApplicationEvent类

public class OrderStateEvent extends ApplicationEvent {
	public OrderStateEvent(OrderStateEventSource source) {
		super(source);
	}
}
2、观察者

使用@EventListener注解,监听ApplicationEventPublisher发布的事件。

@Slf4j
@Configuration
public class OrderStateEventListener {
  
    /**
     * 订单状态事件
     */
    //使用异步注解
    @Async
    @EventListener({OrderStateEvent.class})
    public void processOrderStateEvent(OrderStateEvent event) {
        OrderStateEventSource source = (OrderStateEventSource) event.getSource();
        //省略
        ...
}
3、被观察者

在需要发布事件的服务里,使用ApplicationEventPublisher发布事件。

//提交订单发布事件
public String submitOrder(OrderSubmitRequest orderSubmitRequest) {
...
//发送消息
applicationEventPublisher.publishEvent(new OrderStateEvent());
}

注意:如果在处理事件中发生异常,导致事件没有被处理成功,需要有补偿机制,比如记录在数据库中,再次处理,或者存到redis中,再次处理。

Spring事件监听器之@EventListener原理 简介 @EventListener是一种事件驱动编程在spring4.2的时候开始有的,早期可以实现ApplicationListener接口, 想了解下ApplicationListener的可以参考下这篇文章https://blog.youkuaiyun.com/baidu_19473529/article/details/86683365Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式;为的就是业务系统逻辑的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实 阅读详情

相关推荐

代码优雅之路-spring事件发布机制

事件发布和监听是学习spring的必修课 spring的事件发布有两种方式 第一种是通过spring上下文对象ApplicationContext进行发布事件。 第二种是通过spring的ApplicationEventPublisher进行事件发布。 这两种方式都可以进行事件发布。 本文进行简单的事件发布和监听的实践 首先定义你需要监听的对象 本文以Student为例 @Data @NoArgs...

qq_41760545的博客 516

ApplicationEventPublisher详解

在这里我们就看到了,Spring底层对ApplicationEvent事件和PayloadApplicationEvent事件的处理:如果发布的直接就是ApplicationEvent类型的事件,那么就直接转换成ApplicationEvent类型,而如果不是ApplicationEvent类型的事件,那么就是我们所说的Object类型的事件,就会帮我们封装成PayloadApplicationEvent(ApplicationEvent子类),并将Object类型的事件信息存储到payload属性中。

weixin_45500957的博客 5782

UG NX 12.0零基础实战:从草图绘制到三维建模全流程解析

本文详细解析UG NX 12.0从草图绘制到三维建模的全流程,适合零基础用户快速掌握这款工业设计软件。内容涵盖界面设置、基础操作、草图技巧、拉伸旋转建模、布尔运算等核心功能,并通过机械零件实战案例演示完整设计流程,帮助读者系统学习UG NX 12.0的工业设计应用。

weixin_29261711的博客 1165

ApplicationEventPublisher的使用学习

一、介绍 1.ApplicationEventPublisherAware   ApplicationEventPublisherAware 是由 Spring 提供的用于为 Service 注入 ApplicationEventPublisher 事件发布器的接口,使用这个接口,我们自己的 Service 就拥有了发布事件的能力。   用户注册后,不再是显示地调用其他的业务 Service,而是发布一个用户注册事件。 2.ApplicationListener   ApplicationListener接

谦虚使人发胖的博客 2万+

ACC自适应巡航功能

自适应巡航功能(Adaptive Cruise Control)通过传感器检测车辆前方形式环境,控制自车行驶速度以达到定速巡航、跟车巡航、跟车启停,并支持超车辅助等功能。1. 定速巡航一般可设置车辆在30~150km/h的定速范围内巡航2. 跟车巡航车速0~150km/h范围内的跟车巡航3. 跟车启停30s内:自车随之起步,驾驶员无需操作30s~600s内:驾驶员按钮激活 或 轻踩加速踏板激活起步600s后:ACC退出激活状态进入待激活状态,电子驻车制动EPB会自动启动4. 超车辅助。

LXY_LXY_的博客 1383

USC EE450 CSCI455 CSCI571 Midterm 总结

EE450 Compter Network                1.历年Midterm考题。(更新至2017年spring,如果大家有新的资源欢迎编辑)                 google drive:https://drive.google.com/drive/folders/0B_LCDxpiiXZ1cUNReFpZZHo4NG8?usp=sharing

Small_hour 7112

Java 发布 ApplicationEventPublisher,监听 ApplicationEvent 异步操作

【代码】Java 发布 ApplicationEventPublisher,监听 ApplicationEvent 异步操作。

kuroshiro的博客 467

2023年LitCTF web组wp

1、导弹迷踪2、1zjs3、php是世界上最好的语言!!4、Ping5、我Flag呢?7、作业管理系统8、Vim yyds10、这是什么?SQL!注一下!11、Flag点击就送!12、就当无事发生13、彩蛋。

m0_74160536的博客 1587

Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)

ApplicationEventPublisher 是 Spring 框架中一个功能接口(@FunctionalInterface),用于发布事件 是 Spring 的事件驱动模型的核心部分,开发者可以通过实现这个接口或通过 Spring 提供的现成实现来发布和管理事件

码农研究僧的博客 1885

WPS用户看过来:避开格式错乱坑,用WPS Office完美制作红头文件(2024最新版)

本文详细解析了WPS Office与Word在红头文件制作中的核心差异,提供了2024年最新版的零误差实战指南。从字体处理、页面布局到红头制作关键步骤,帮助用户避开格式错乱坑,确保跨设备显示一致。特别针对WPS用户优化,解决字体丢失、版式错位等常见问题。

weixin_26800111的博客 213

【Pytorch教程】:卷积神经网络 CNN

Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知

nanke_4869的博客 8080

Spring自定义发布ApplicationEventPublisher和监听ApplicationEvent事件

Spring提供了事件的发布和订阅,可以使核心业务与子业务进行解耦,也便于后期的业务的扩展。比如用户登录动作,用户登录需要记录登录信息,可增加一个监听事件处理即可,后续可能会增加异地登录通知功能,新增一个监听事件来做就好,不需要修改登录业务。 (1)自定义Event类,继成ApplicationEvent定义事件 (2)调用ApplicationEventPublisher的publishEv...

星空的风fly 2190

SAP成本核算变式OKKN配置详解:从CK11N到CK24,手把手教你搞定标准成本发布

本文深入解析SAP成本核算变式OKKN的配置原理与实战应用,涵盖从CK11N到CK24的标准成本发布全流程。详细讲解数量结构控制、价值结构配置及间接费用计算规则,帮助成本会计精准掌握标准成本计算逻辑,解决BOM版本选择、工艺路线获取等常见问题,提升企业成本管理效率。

weixin_27219587的博客 284

Spring 事件发布订阅

Spring中事件的发布订阅机制 1.1 事件的发布者发布事件,事件的监听这对对应的事件进行监听,当监听到对应的事件时,就会触发调用相关的方法。因此,在事件处理中,事件是核心,是事件发布者和事件监听者的桥梁。 1.2 Spring 是基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件发布功能。 Spring中相关的主要有四个接口:ApplicationEv...

过河的小卒子的博客 1715

用 ABAP LSMW 的 Standard Batch / Direct Input 稳准快迁移物料主数据:从 MM01 录制到 RMDATIND 直入的落地指南

本文详细介绍了SAP数据迁移中LSMW工具的使用方法,重点分析了物料主数据迁移的两种主要路径:Batch Input Recording和Standard Batch/Direct Input。前者通过录制事务操作实现快速起步,后者通过调用预置接口程序实现稳定高效的批量处理。文章深入解析了Standard Direct Input的具体实施步骤,包括对象属性设置、源结构定义、字段映射规则等关键环节,并特别强调了迁移前的准备工作(如编号策略、视图策略等)对项目成功的重要性。通过对比两种方法的优缺点,为不同业务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 151

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

如何用Spring事件发布监听机制实现业务解耦

相对于实现ApplicationListener接口来监听事件的方式,

xxxzzzqqq_的博客 229

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

spring中事件发布设计与实现

spring中的事件发布框架依赖于三个抽象,ApplicationEvent,ApplicationListener,ApplicationEventPublisher。ApplicationEventPublisher的实现类依赖于AbstractApplicationContext,当中又依赖于ApplicationEventMulticast,其发布事件依赖于是否有设置事件监听器执行器,如果有设置,执行事件监听器就异步的,否则就是同步的。 ...

多看多听多总结 391

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring-Boot和Spring的监听器模式

最近阅读SpringBoot的源码,发现一个奇怪的现象,项目中有两处地方具有发布事件功能,一个是SpringApplicationRunListener接口;另一个是ApplicationEventPublisher接口的publishEvent方法,ApplicationContext接口实现了该接口。 先讲结论。 经过仔细分析,发现SpringApplicationRunListener接口是属于SpringBoot包下的,该接口用于发布SpringBoot相关流程的事件;而ApplicationE

tanglihai的博客 697

ApplicationEventPublisher的简单使用

s从需求开始 一个简单的场景,就是用户注册成功后,发短信通知和发邮件通知,其实这样的场景就是两种处理情况 注册成功后起一个线程执行发短信和发邮件通知 发送用户ID到mq,然后mq去执行 也许还有其他,那就是我的知识盲区了。其实如果正规的话这种耗时的操作应该是使用MQ,但是使用MQ其实无形之间就增加了系统的复杂性,那么此时可以使用ApplicationEventPublisher代替MQ 源码下载 https://gitee.com/cbeann/Demooo/tree/master/springb

CBeann的博客 1万+

ApplicationEventPublisher笔记

ApplicationEventPublisher是ApplicationContext的父接口之一。这接口的作用是:Interface that encapsulates event publication functionality. 功能就是发布事件,也就是把某个事件告诉的所有与这个事件相关的监听器。 这个接口只有两个方法(这两个是重载方法)。所以把整个接口的代码都贴上来。 /**...

weixin_30252709的博客 111

观察者模式在spring中的应用

本文系统介绍了观察者模式及其在Spring框架中的应用。观察者模式是一种对象行为型模式,通过定义主题(Subject)和观察者(Observer)的一对多依赖关系,实现状态变更的自动通知机制。Spring通过ApplicationEvent、ApplicationListener和ApplicationEventPublisher实现了该模式,形成完整的事件监听机制。文章详细剖析了Spring事件机制的实现原理,包括事件发布流程、监听器注册过程,并重点介绍了如何通过配置TaskExecutor实现异步事件处

186

Spring的事件发布(ApplicationEventPublisher)和事件订阅(ApplicationListener)

Spring 的事件发布工具 平时开发中会发现Spring提供了一系列的工具满足我们的业务场景,其中有一项是提供了事件的发布和订阅。 事件的发布主要是依靠ApplicationEventPublisher来进行的。 要想实现事件发布主要需要下面几个对象:任务、事件、事件监听。 任务 任务就是一个普通的类,用来保存你要发布事件的内容。这个没有特殊限制,可以根据自己业务随意设置。 import lom...

大风的博客 2万+

用Spring的ApplicationEventPublisher进行事件发布和监听

有时候,我们只是想发布一些本地的事件,并不需要引入MQ的,可以直接使用Spring的ApplicationEventPublisher来完成简单事件的发布和监听的。比如像下面的场景,ApplicationEventPublisher就够用了。模块间的逻辑解耦,但不跨服务;轻量级的本地事件通知应用内部的解耦和扩展点:比如说在DDD里,聚合保存数据成功后,需要触发若干的后续动作无强事务要求、无强持久化要求的通知场景。

fuladulu的博客 574

Spring事件发布和监听机制详解

通过今天内容的学习,我们掌握了Spring中事件处理的实现过程,这也为实现自定义的事件驱动架构提供了很好的基础,很多实现上的细节可供我们参考。我们已经明白了事件发布的独立过程,现在回到Spring容器来获取用于事件发布的ApplicationEventMulticaster以及各个用于事件监听的ApplicationListener的具体方式。用户发布事件的ApplicationEventPublisher和用于监听事件的ApplicationListener是Spring框架中实现事件驱动编程的核心类。

2401_83062316的博客 1727
上一篇: Spring 注解:@Async
下一篇: springboot+springsecurity+springsession实现session共享
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值