Spring事件监听:无法接收List<event>?

在日常开发中,我们常使用 Spring 的 @EventListener 注解来监听事件。但在处理 批量事件 时,却可能遇到一些"看似合理但无法生效"的监听方式。

本文以实际具体案例为出发点,结合源码分析事件派发逻辑,并给出两种可行解决方案,帮助你真正吃透 Spring 事件机制。

问题背景:监听 List<User> 无法生效

UserService#save 方法中发送一个批量用户事件:

希望在监听器中直接接收这批用户:

但实际上,这个方法不会被触发。

源码剖析:Spring 是如何匹配监听器的?

通过上图可知,获取事件监听器是核心,其源码如下:

在 Spring 中,@EventListener 注解的方法在容器启动阶段,会被 EventListenerMethodProcessor 扫描并封装为 ApplicationListenerMethodAdapter 类型的监听器。匹配逻辑的关键如下所示:

解决方案

方法一:监听 PayloadApplicationEvent<List<User>>

这种写法可以被正确识别为监听器,因为事件类型完全匹配。

方法二:自定义包装类型

如果希望在业务中更明确事件语义,也可以自定义一个批量事件对象:

然后相应地修改发布事件:

这种方式具有更好的可读性和扩展性,推荐使用


如果你觉得这篇文章对你有启发,欢迎点赞、收藏、转发 🙌

如文中有理解不当或疏漏之处,也欢迎留言指正,共同进步 🙏,持续分享更多 Spring 源码剖析、实战技巧与架构实践,欢迎关注!

相关推荐
小钻风33664 分钟前
Spring Boot WebSocket 两种集成方式深度解析
spring boot·后端·websocket
云烟成雨TD18 分钟前
Spring AI Alibaba 1.x 系列【55】Interrupts 中断机制:静态中断源码分析
人工智能·后端·spring
SuniaWang22 分钟前
AgentX 专栏-00前言:一个Java开发者的Agent实践之路
java·人工智能·spring boot·langchain·系统架构
云烟成雨TD39 分钟前
Spring AI Alibaba 1.x 系列【57】SAA Admin 前后端技术栈与分层设计详解
java·人工智能·spring
九皇叔叔42 分钟前
Spring-Ai-Alibaba [02] chatclient-demo
java·人工智能·spring·ai
逍遥德1 小时前
Java编程高频的“踩坑点”-01:fastjson.JSON 转换时泛型擦除问题
java·spring boot·spring·系统架构·json
星轨zb1 小时前
Spring Data Redis 实战避坑:搞定序列化乱码与 Hash 结构存储
java·redis·spring·lock
Jul1en_1 小时前
【SpringCloud】微服务 Sentinel 详解
java·spring·sentinel
闪电悠米1 小时前
黑马点评短信登录01_session_sms_login
java·spring boot·redis·git·spring·面试
Advancer-1 小时前
黑马点评plus --异步秒杀重构升级
java·spring boot·重构·intellij-idea