使用 Spring 事件监听机制实现跨模块调用

之前一个项目,有两个模块,A 模块需要依赖 B 模块,但现在 B 模块有地方需要调用 A 模块的方法,如果直接依赖,又会产生循环依赖问题。最终选择使用 spring 的事件监听来解决该问题。

思路就是,B 模块去发布事件,A 中监听,得到数据后,通过引用返回给 B。

首先是定义事件

public class getUserInfoEvent extends ApplicationEvent {private String message;private Integer griddingId;private StringBuilder griddingName;public getUserInfoEvent(Object source, String message, Integer griddingId, StringBuilder griddingName) {super(source);this.message = message;this.griddingId = griddingId;this.griddingName = griddingName;//接收要获取到值的StringBuilder}public StringBuilder getGriddingName() {return griddingName;}public Integer getGriddingId() {return griddingId;}public String getMessage() {return message;}
}

然后在 B 中去发布事件

   @AutowiredApplicationEventPublisher applicationEventPublisher;   //这个必须注入@Overridepublic SysUserVO getUserInfo(Long userId) {SysUser user = getById(userId);Integer griddingId = user.getGriddingId();StringBuilder griddingName= new StringBuilder();  //使用stringbuilder进行引用字符串操作,来获取需要的值//上面是业务相关getUserInfoEvent event = new getUserInfoEvent(this,"发布“获取用户信息”事件",griddingId,griddingName); //定义事件applicationEventPublisher.publishEvent(event);  //发布事件//下面是获取到数据之后的操作,不重要//这里事件是同步进行的SysUserVO sysUserVO = new SysUserVO();BeanUtils.copyProperties(user,sysUserVO);sysUserVO.setGriddingName(griddingName.toString());//  找到该用户所属角色String roleName = getRoleByUserId(userId);sysUserVO.setRoleName(roleName);SysUser parentUser = sysUserMapper.selectById(user.getParentId());sysUserVO.setParentName(ObjectUtils.isEmpty(parentUser) ? null : parentUser.getUserName());return sysUserVO;}

最后在 A 中监听事件

@EventListener
public void getGriddingNameByUserIdEventListener(getUserInfoEvent event) { //参数必须填写要监听的事件类,事件发布后这边就会监听到//形参event中存有传递的相关数据System.out.println(event.getMessage()); //会打印出---发布“获取用户信息”事件//下面为个人业务相关代码Integer griddingId = event.getGriddingId();StringBuilder griddingName = event.getGriddingName();//再通过网格id来查找对应的网格信息GriddingArea griddingArea = getOne(new LambdaQueryWrapper<GriddingArea>().eq(GriddingArea::getId, griddingId));griddingName.append(griddingArea.getGriddingName());  //使用同一个StringBuilder对象来操作,这里把获取到的字符串存入后,事件发布者那边就能得到数据了。System.out.println("griddingName"+griddingName);
}

非常好用👍

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

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

相关文章

JAVA ---JAVA运算符详解

运算符:对操作数进行操作的符号 运算符分为:算术运算符 关系运算符 逻辑运算符 位运算符 移位运算符 条件运算符 1.算术运算符 基本四则运算符 增量运算符 自增自减运算符 1.1 基本四则运算符&#xff1a;加减乘除模( - * / %) int a 20; int b 10; System.out.println(a…

【linux】linux中免交互命令expect原理与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

智能客服新突破:大型模型训练助力提升客户服务体验

项目场景&#xff1a;训练大模型智能客服 智能客服新方法在金融服务领域的科技前沿应用 ** 一、 引言 随着科技的飞速发展&#xff0c;智能客服作为金融服务领域的一大创新点&#xff0c;正在逐渐改变传统的客户服务模式。特别是在自然语言处理&#xff08;NLP&#xff09;等…

【C++】多态:编程中的“一人千面”艺术

目录 一、多态的概念二、多态的定义及实现1.多态的构成条件2.虚函数的重写2.1 什么是虚函数&#xff1f;2.2 虚函数的重写是什么&#xff1f;2.3 虚函数重写的两个例外2.4 C11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 三、抽象类3.1 概念3.2 接口继承和实现…

重学java 47.集合 ② 迭代器

金榜题名&#xff0c;前程似锦 —— 24.5.27 一、迭代器的介绍和使用 1.概述 Iterator接口 2.主要作用 遍历集合 3.获取 Collection中的方法&#xff1a; Iterator<E> iterator() 4.方法 boolean hasNext() —> 判断集合中有没有下一个元素 E.next() —> 获取下一个…

《QT实用小工具·六十六》基于QT开发的界面收缩栏

1、概述 源码放在文章末尾 该项目实现了一个界面收缩栏的效果&#xff0c;该收缩栏包含如下功能&#xff1a; 1、可以在收缩栏中添加若干个界面 2、鼠标点击收缩栏可以展开或收起界面 3、鼠标拖动收缩栏可以和其他界面互换位置 项目demo演示如下所示&#xff1a; 使用方式&…

iptables 规则参数

本文只是记录常用的命令行规则&#xff0c;如果想了解和学习 iptables&#xff0c;请移步《IPtables》 每一条匹配规则都可以使用 ! 进行取反。如 ! --dport 22 表示所有目标端口不为 22 的请求 下表为链和表的对应关系 ChainTablePREROUTINGraw表&#xff0c;mangle表&…

小甲零基础入门学习Python(全96集)

介绍 本课程旨在为学者提供关于Python 3.x版本的基础教学&#xff0c;确保学员能够熟练掌握其语法结构。通过整合讲师的实际工作经验&#xff0c;课程内容不仅覆盖了Python的应用技巧&#xff0c;还深入讨论了相关的数据结构知识。为了增强学习效果&#xff0c;我们精心准备了…

Unable to find a node that satisfies the following conditions [port xxxx]

Unable to find a node that satisfies the following conditions [port xxxx] 原因&#xff1a;当容器使用端口映射(docker run -p xxxx:xxxx或 compose模板中的 ports)之后 系统会在宿主机上创建一个port&#xff0c;通过NAT来访问容器的指定port。如果宿主机上的端口被容器或…

版本控制(Version Control)(GIT )

版本控制系统的基本概念 版本库&#xff08;Repository&#xff09;&#xff1a;存储项目版本的本地或远程存储库。工作副本&#xff08;Working Copy&#xff09;&#xff1a;可编辑的项目本地副本。文件&#xff08;File&#xff09;&#xff1a;项目中的单个文件。版本&…

jenkins 用户权限(Manage-Roles)

本次需求将DEV环境和SIT环境分开,SIT用户登录上来只能看他的SIT项目和视图 安装roles插件 进入 manage role 项目授权 用户 正则匹配你需要的项目 dev .*-dev*或者.*-dev$ sit .*-sit最后细分assign role 测试使用sit账号登录 ,视图和项目都是SIT账号的

爬虫视图展示之 Power BI

实现方式 读取数据的实现 selenium 库 requests 库 存储媒介 MysqlElasticSearch 图表展示 GrafanaPower BI 是什么&#xff1f; Power BI 简单且快速&#xff0c;能够从 Excel 电子表格或本地数据库创建快速见解。 同时 Power BI 也可进行丰富的建模和实时分析&#xff…

移动云:开发者手中的未来钥匙

《移动云&#xff1a;开发者手中的未来钥匙》 引言一、无缝集成&#xff0c;加速开发进程二、数据智能&#xff0c;洞悉用户心声三、安全合规&#xff0c;护航创新之旅四、成本优化&#xff0c;助力轻装前行总结 引言 在科技日新月异的今天&#xff0c;移动云已成为推动行业变革…

kube-apiserver内存占用过多 go tool pprof 入门

目录 环境问题排查1、kube-apiserver %CPU 146 正常&#xff0c;%MEM 高达70&#xff0c;&#xff0c;load average 400&#xff0c;出现kswapd0进程。2、k describe node 看到 SystemOOM3、是否大量连接导致&#xff1f;4、通过prom查看指标5、访问K8s API6、pprof 火焰图 解决…

云服务器购买之后到部署项目的流程

1.通过账号密码登录百度智能云控制台; 2.进入对应的服务器‘云服务器BBC’ 找到’实例‘即找到对应的服务器列表; 此时通过本地电脑 1.cmd命令提示符 PING 服务器公网地址不通&#xff1b; 2.通过本地电脑进行远程桌面连接不通 原因&#xff1a;没有关联安全组&#xff0c;或者…

持续总结中!2024年面试必问 20 道 Redis面试题(十)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道 Redis面试题&#xff08;九&#xff09;-CSDN博客 十九、Pipeline有什么好处&#xff0c;为什么要用pipeline Pipeline&#xff08;管道&#xff09;是 Redis 提供的一种功能&#xff0c;它允许客户端将多…

Linux的nload/nettraf命令实时网卡流量监测

对于linux的网卡上下行流量监测方法有很多 例如nload 现成的nload命令 现成的有 nload 安装 yum -y install nload 查看所有网卡实时网速 sudo nload -m 按enter/上下翻页键即可切换网卡 查看指定网卡实时网速 sudo nload eth0 -m 基于nettraf编译的rpm包 当然也可以你…

MySQL:如果用left join的话,左边的表一定是驱动表吗

一、前言 在日常开发过程中关于MySQL的优化方面&#xff0c;我们知道小表驱动大表原理。例如left join&#xff0c;放在左边的表作为驱动表。但是用left join的话&#xff0c;左边的表一定是驱动表吗&#xff0c;本文将通过案例分析给出详细分析。 二、概念 在MySQL中&#xf…

Android开发 -- JNI开发

1.配置JNI环境 创建JNI文件夹 在项目的主目录中创建一个名为 JNI 的文件夹。这个文件夹将包含所有的本地源代码和配置文件。 编写Android.mk文件 这个文件是一个 Makefile&#xff0c;用来指导 NDK 如何编译和构建本地代码。 #清除之前定义的变量&#xff0c;确保每个模块的…

安装HAP时提示“code:9568344 error: install parse profile prop check error”错误

问题现象 在启动调试或运行应用/服务时&#xff0c;安装HAP出现错误&#xff0c;提示“error: install parse profile prop check error”错误信息。 解决措施 该问题可能是由于应用使用了应用特权&#xff0c;但应用的签名文件发生变化后未将新的签名指纹重新配置到设备的特…