当前位置: 首页 > news >正文

Spring中的ApplicationContext.publishEvent

简单理解

其实就是监听处理。比如找工作平台上,雇主 employer 发布自己的雇佣条件,目的是平台中有符合条件的求职者时,及时向雇主推荐。求职者发布简历,当平台发现某个求职者比较符合条件,就触发被动,推荐给雇主。

实现的组成

  1. XXXXXXXEvent:容器事件,相当于上方的【目的是平台中有符合条件的求职者时,及时向雇主推荐】。这个事件继承ApplicationEvent,声明我是一个事件。
  2. XXXXXXXEventListener:事件监听器,相当于上方的【当平台发现某个求职者比较符合条件,就触发被动,推荐给雇主。】。其实包含两个主要功能:一个是监听某个event是否被发布了,一个是若是event被发布了,之后的处理操作。继承ApplicationListener
  3. applicationContext.publishEvent:发布事件,用来触发容器事件。相当于上方的【求职者发布简历】。该方法相当于人为去发布事件,进而引起EventListener中内容的执行。但当系统创建spring容器、加载spring容器时会自动触发容器事件

使用场景

当系统中的某个操作可在多个功能中被执行时,且该操作所需参数固定,使用这一方法可大大减少代码量;
不同Bean之间进行传递时,也可实现解耦。

举例

文件结构(只做参考)

在这里插入图片描述

applicationContext.publishEvent发布事件
    @Autowiredprivate ApplicationContext applicationContext;@RequestMapping(value = "/test", method = RequestMethod.POST)@ResponseBodypublic CommonResult<BillSupplier> test(@RequestParam(value = "param2") String param2) {applicationContext.publishEvent(new XXXXEvent(this, param2));return CommonResult.success("测试成功!");}
XXXXEvent.java
@Getter
@Setter
public class XXXXEvent extends ApplicationEvent {private param2;public XXXXEvent(Object source, param2) {super(source);this.param2 = param2;}
}
XXXXHandler.java
@EnableAsync
public class XXXXHandler implements ApplicationListener {@Overridepublic void onApplicationEvent(ApplicationEvent event) {if (event instanceof XXXXEvent) {try {// 此处为处理逻辑} catch (Exception e) {e.printStackTrace();}} else {// log.info("容器本身事件:" + event);}}
}
	此处介绍一下instanceof:作用:检查左侧对象是否为右侧类或其子类的实例,若是则为true,否则为false。
http://www.lryc.cn/news/304940.html

相关文章:

  • jackson、gson、fastjson和json-lib四种主流json解析框架对比
  • 已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法
  • 在jar里限制指定的包名才可调用(白名单)。
  • python 提取PDF文字
  • 电气机械5G智能工厂数字孪生可视化平台,推进电气机械行业数字化转型
  • C# (WebApi)整合 Swagger
  • 导入excel某些数值是0
  • wo-gradient-card是一款采用uniapp实现的透明辉光动画卡片
  • Spark: a little summary
  • 018—pandas 生成笛卡尔积排列组合合并多列字符串数据
  • 【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)
  • bugku3
  • 相机的白平衡
  • 刷题日记-Day2- Leedcode-977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II-Python实现
  • Linux命令-chcon命令(修改对象(文件)的安全上下文)
  • 【漏洞复现】大华DSS视频管理系统信息泄露漏洞
  • websocket了解下
  • docker install private registry 【docker 安装 registry 仅证书认证】
  • JavaWeb——004Maven SpringBootWeb入门
  • 数据结构与算法-常用排序算法
  • 链表之“无头单向非循环链表”
  • 一休哥助手网页版如何使用
  • 个人博客系统测试
  • 智慧应急的未来:物联网技术引领智慧应急发展新趋势
  • 字符串摘要(C语言)
  • Linux进一步研究权限-----------ACL使用
  • 剪辑视频调色软件有哪些 剪辑视频软件哪个最好 剪辑视频怎么学 剪辑视频的方法和步骤 会声会影2024 会声会影视频制作教程
  • 【Linux进阶之路】Socket —— “UDP“ “TCP“
  • 一些用 GPT 翻译的计算机科学/人工智能 PDF 讲义
  • 重大更新:GPT-4 API 现全面向公众开放!