欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Spring无法接收List<event>的解决方案,

来源: javaer 分享于  点击 34449 次 点评:102

Spring无法接收List<event>的解决方案,


目录
  • 引言
  • 问题背景:监听 List<User> 无法生效
  • 源码剖析:Spring 是如何匹配监听器的?
  • 解决方案
    • 方法一:监听 PayloadApplicationEvent<List<User>>
    • 方法二:自定义包装类型

引言

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

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

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

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

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

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

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

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

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

解决方案

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

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

方法二:自定义包装类型

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

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

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

到此这篇关于Spring无法接收List<event>;的解决方案的文章就介绍到这了,更多相关Spring无法接收List<event>;内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

您可能感兴趣的文章:
  • spring @EventListener 事件与监听的示例详解
  • SpringBoot事件监听器@EventListener的实现
  • Spring源码之事件监听机制详解(@EventListener实现方式)
  • 使用Spring注解@EventListener实现监听原理
  • Spring源码之事件监听机制(实现EventListener接口方式)
相关栏目:

用户点评