spring事件监听的核心机制

Spring 事件监听机制的核心是基于观察者模式(Observer Pattern) 实现的组件间解耦通信机制,通过事件(Event)、监听器(Listener)、事件发布者(Publisher) 三者的协作,实现 “发布 - 订阅” 式的交互。其核心目标是让组件之间无需直接依赖,通过事件传递信息,从而降低耦合度。

核心机制的关键组成

Spring 事件监听机制的核心由以下 4 个部分构成,它们协同工作完成事件的发布与处理:

1. 事件(Event):信息的载体

事件是传递数据的载体,所有事件需直接或间接继承 Spring 提供的ApplicationEvent类(Spring 4.2 + 后可省略继承,支持任意对象作为事件)。
 
  • 内置事件:Spring 定义了一系列容器生命周期相关的事件(如ContextRefreshedEvent容器初始化完成、ContextClosedEvent容器关闭等),用于通知容器状态变化。
  • 自定义事件:用户可通过继承ApplicationEvent定义业务事件,携带业务数据(如OrderCreatedEvent订单创建事件,包含订单 ID、用户信息等)。
 
示例:自定义订单创建事件
 
java
 
运行
 
public class OrderCreatedEvent extends ApplicationEvent {private Long orderId;private String username;// 构造方法需传入事件源(发布事件的对象)public OrderCreatedEvent(Object source, Long orderId, String username) {super(source);this.orderId = orderId;this.username = username;}// getters
}
 

2. 监听器(Listener):事件的处理者

监听器是事件的 “订阅者”,负责定义事件发生后的处理逻辑。Spring 中监听器的实现方式有两种:
 
  • 实现ApplicationListener接口:泛型指定监听的事件类型,重写onApplicationEvent方法处理事件。
  • 使用@EventListener注解:在方法上标注该注解,并指定监听的事件类型(更简洁,推荐)。
 
监听器需要被 Spring 容器管理(如标注@Component),才能被识别并注册。
 
示例:监听订单创建事件的监听器
 
java
 
运行
 
@Component
public class OrderListener {// 方式1:@EventListener注解(推荐)@EventListenerpublic void handleOrderCreated(OrderCreatedEvent event) {System.out.println("订单创建:" + event.getOrderId() + ",用户:" + event.getUsername());// 执行后续逻辑(如发送短信、更新库存等)}// 方式2:实现ApplicationListener接口/*@Componentpublic class OrderListener implements ApplicationListener<OrderCreatedEvent> {@Overridepublic void onApplicationEvent(OrderCreatedEvent event) {// 处理逻辑}}*/
}
 

3. 事件发布者(Publisher):事件的触发者

事件发布者是 “发布者”,负责在特定时机发布事件。Spring 中通过ApplicationEventPublisher接口(或其扩展ApplicationEventPublisherAware)发布事件。
 
  • 所有 Spring 容器(ApplicationContext)都实现了ApplicationEventPublisher接口,因此可直接在 Bean 中注入ApplicationEventPublisher用于发布事件。
 
示例:发布订单创建事件
 
java
 
运行
 
@Service
public class OrderService {// 注入事件发布器@Autowiredprivate ApplicationEventPublisher publisher;public void createOrder(Long orderId, String username) {// 1. 执行创建订单的核心逻辑System.out.println("创建订单:" + orderId);// 2. 发布订单创建事件(通知其他组件)publisher.publishEvent(new OrderCreatedEvent(this, orderId, username));}
}
 

4. 事件多路分发器(ApplicationEventMulticaster):核心调度者

ApplicationEventMulticaster是 Spring 事件机制的 “中枢”,负责管理所有监听器和分发事件,是连接发布者和监听器的核心组件。其工作流程如下:
 
  1. 注册监听器:Spring 容器启动时,会自动扫描所有监听器(ApplicationListener@EventListener标注的 Bean),并将它们注册到ApplicationEventMulticaster中。
  2. 分发事件:当发布者调用publishEvent发布事件时,事件会被传递给ApplicationEventMulticaster;它根据事件类型,找到所有匹配的监听器(监听该事件或其父类事件的监听器),并触发监听器的处理方法。
 
Spring 默认的ApplicationEventMulticaster实现是SimpleApplicationEventMulticaster,支持同步和异步两种事件分发方式:
 
  • 同步(默认):事件发布后,会立即执行所有监听器的逻辑,直到全部完成(发布者会阻塞等待)。
  • 异步:通过配置TaskExecutor,可让监听器在独立线程中执行,发布者无需等待(需在@EventListener上标注@Async,并配置线程池)。

核心流程总结

Spring 事件监听的完整流程可概括为:
 
  1. 定义事件:通过ApplicationEvent子类或普通对象封装业务数据。
  2. 注册监听器:监听器被 Spring 容器扫描并注册到ApplicationEventMulticaster
  3. 发布事件:业务逻辑中通过ApplicationEventPublisher发布事件。
  4. 分发与处理:ApplicationEventMulticaster接收事件,找到匹配的监听器,触发其处理方法(同步或异步)。

核心价值

  • 解耦:发布者与监听器无需互相依赖,通过事件间接通信,降低组件耦合度。
  • 扩展性:新增业务逻辑(如订单创建后新增 “发送邮件” 功能)只需添加新的监听器,无需修改发布者代码。
  • 灵活性:支持同步 / 异步处理,可根据业务需求选择(如耗时操作适合异步)。
 
这一机制在 Spring 内部被广泛使用(如容器生命周期管理),也常用于业务系统中跨组件通信(如订单流程、消息通知等场景)。

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

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

相关文章

直播软件开发搭建公司

作为专ye的直播软件开发公司,山东(泰安)布谷鸟网络科技有限公司深耕直播软件开发和搭建业务,致力于为客户提供稳定、高效的直播解决方案,推出布谷直播源码,满足不同业务场景的定制需求。本文将从多个角度解析直播软…

freeswitch的proxy_media模式下video流的问题与修正

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 测试过程中发现fs的proxy_media模式的一个bug,就是video媒体流的转发处理有问题。 环境 CentOS 7.9 freeswitch 1.6.20 问题 fs配置为proxy_media模式,A路发起…

DNS 相关

dig 使用 背景 example.com 是一个公网注册的域名,在阿里云配置权威DNS解析,本地内网服务器也搭建了一个bind server同样配置了example.com的zone解析该域名,本地所有ECS的/etc/resolv.conf 配置的 nameserver为 10…

2025 年无锡专线物流公司最新推荐排行榜:聚焦个性化运输解决方案,精选优质服务商往返无锡/冷链无锡/公路无锡/大件无锡专线物流公司推荐

当前工业生产节奏持续加快,无锡地区企业对专线物流定制服务的需求愈发多样化、精细化,涵盖往返运输、冷链配送、大件机械运输等多个细分场景。然而,物流市场中企业资质、服务能力参差不齐,部分服务商存在定制方案不…

Dubbo入门-通过spring-boot来动手实践

第一种--快速创建应用 可以直接下载示例项目,链接:https://github.com/apache/dubbo-samples/tree/master/11-quickstart 第二种--新建项目 新建 Java 空白 Maven 项目jdk17之后我们还需要创建 dubbo-spring-boot-de…

使用ceph rdb做k8s后端存储(ceph-csi storageclass

环境:Os:Centos 7k8s:v1.28 ceph:14.2.22###############################################ceph端分配存储##############################1.分配osd pool和创建用户[root@master tmp]#ceph osd pool create dynamics-…

2025 最新火烧板源头厂家推荐排行榜:自有矿山加持 + 品质卓越,芝麻灰 / 五莲花等石材采购优选指南

当前火烧板市场面临多重采购困境:部分厂家缩减生产流程导致产品色泽不均、质地松软,难以适配建筑与装修行业的高品质需求;多数中小型商家缺乏自有矿山,原材料依赖外购,常因供应中断或品质波动延误工程进度;加工精…

【IEEE出版、吉首大学主办】第二届智能机器人与自动控制国际学术会议 (IRAC 2025)

第二届智能机器人与自动控制国际学术会议 (IRAC 2025) 2025 2nd International Conference on Intelligent Robotics and Automatic Control 在这里看会议官网详情 中国-吉首 | 2025年11月28日-30日 收录类型:IEEE …

第三次课动手动脑合集

链接:https://files.cnblogs.com/files/blogs/847696/动手动脑3.zip?t=1760694634&download=true编译错误的原因是:在Test类的main方法中,尝试创建Foo类的对象obj1时,没有传递任何参数。但Foo类定义了一个带参…

2025 年火山石厂家最新推荐排行榜:聚焦自有矿藏与全自动生产,涵盖滤料填料等多品类企业权威指南人工湿地填料/人工湿地滤料/黑色/红色火山石厂家推荐

当前火山石应用已广泛覆盖污水处理、人工湿地、园林造景等多个领域,市场需求持续攀升,但采购端却面临诸多困境。不少采购方因缺乏专业判断,难以辨别厂家资质,常遭遇原料不稳定导致的产品性能波动、生产设备落后引发…

mysql5.7.44升级到8.0.34 mysql跨版本升级实战操作 windows环境

mysql5.7.44升级到8.0.34 mysql跨版本升级实战操作 windows环境背景 服务器当前数据库版本为mysql5.7.22 通过小版本直接升级到mysql5.7.44 (5.7.44是当前大版本最新状态);然后我们通过mysql5.7.44 可直接升级到my…

【SPIE出版、往届已检索】第十届能源系统、电气与电力国际学术会议 (ESEP 2025)

ESEP 2025已通过SPIE - The International Society for Optical Engineering (ISSN: 0277-786X)出版审核,EI 见刊检索稳定! 第十届能源系统、电气与电力国际学术会议 (ESEP 2025) 2025 10th International Conferenc…

2025 防火隔断厂家最新推荐排行榜:甲级防火玻璃隔断厂家深度测评,精选优质品牌助力采购决策

引言随着建筑行业对防火安全的要求日趋严苛,防火隔断作为关键防护设施,市场需求持续攀升,但行业乱象却让采购者陷入困境。部分品牌缺乏核心技术,产品耐火性能不达标,无法在火灾中有效阻隔火势与有毒烟气;新兴品牌…

2025-10-17

2025-10-17今天测试新写的npc,发现参考的那个微架构图有问题(或者说还不够完善),修改之后dummy测试程序通过了,但是add测试程序有问题,发现一直在死循环。这一刻我才意识到cpu出了问题调试起来会有多难受,这还是…

2025 年最新推荐!国内优质球墨铸铁管厂家排行榜,涵盖市政 / 给水 / 水利工程用管,助力采购高效选材

当前基础设施建设对球墨铸铁管需求持续增长,但市场品牌繁杂、质量参差不齐,部分产品存在抗压性不足、防腐性能差等问题,给工程质量埋下隐患。采购方在选择时,常因缺乏专业鉴别能力,难以精准挑选适配市政、给水、水…

Nexpose 8.24.0 for Linux Windows - 漏洞扫描

Nexpose 8.24.0 for Linux & Windows - 漏洞扫描Nexpose 8.24.0 for Linux & Windows - 漏洞扫描 Rapid7 on-prem Vulnerability Management, released Oct 15, 2025 请访问原文链接:https://sysin.org/blog/…

有趣评测小程序系统:开启视频与答题变现新创业风口

在当下小程序创业热潮中,一款兼具实用性与盈利性的工具成为众多创业者的迫切需求。有趣评测小程序系统作为 “天天变现” 的配套小程序,凭借答题与视频变现的核心功能,依托微擎系统实现便捷交付,为微信小程序创业者…

看图猜成语达人小程序:一站式趣味与变现解决方案

在小程序生态蓬勃发展的当下,兼具娱乐性与商业价值的应用成为市场热点。“看图猜成语达人” 小程序依托微擎系统,融合经典成语文化与创新互动模式,不仅为用户带来沉浸式猜谜体验,更为主理人提供低门槛、高潜力的流…

Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架

Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架 Rapid7 Penetration testing, released October 15, 2025 请访问原文链接…