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.hqwc.cn/news/488388.html

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

相关文章

AES算法框架

AES算法框架 在AES中,明文和秘钥都用“状态(State)”表示。 (1)明文State。明文State可以用二维矩阵表示,该数组为4行,Nb列,设4 X Nb。数组每个元素为1个字节,即为2个十六进制数。 Nb=数据块长度/32。当数据块长128时,Nb=4;当数据块长192时,Nb=6;当数据块长256时…

数据结构-Queue队列

一,队列的简单认识 队列也是一种线性数据结构,与栈不同的是,它只能从一端添加元素,从另一端取出元素.定义了一端,另一端也就确定了. (当然还有一个特殊的双向队列LinkedList除外,它既可以从队首添加元素,也可以移除元素,队尾也是一样的,既可以添加元素,也可以移除元素) 二,队…

在项目中使用CancelToken选择性取消Axios请求

Axios 提供了 CancelToken 类来创建取消标记。取消标记实际上是一个包含 token 标记和 cancel 方法的对象。 1、基本使用方法 const CancelToken axios.CancelToken; const source CancelToken.source();axios.get(/user/12345, {cancelToken: source.token }).catch(functi…

拓扑空间简介

目录 介绍集合论与映射映射相关定义映射&#xff08;map&#xff09;映射的一种分类&#xff1a;一一的和到上的 拓扑空间背景介绍开子集开子集的选择 拓扑拓扑空间常见拓扑拓扑子空间同胚其他重要定义 开覆盖紧致性有限开覆盖紧致性 R R R的紧致性 习题 介绍 这是对梁灿彬的《…

【MIT-PHP-推荐】imi-ai 是一个 ChatGPT 开源项目

mi-ai 是一个 ChatGPT 开源项目&#xff0c;支持聊天、问答、写代码、写文章、做作业等功能。 项目架构合理&#xff0c;代码编写优雅&#xff0c;简单快速部署。前后端代码完全开源&#xff0c;不管是学习自用还是商用二开都很适合。 本项目现已支持 ChatGPT 聊天 AI 和 Emb…

MobaXterm连接VirtualBox虚拟机

目录 1.下载MobaXterm 2.获取连接配置 3.mobaXterm连接虚拟机 4.更好的方案 1.下载MobaXterm 据说MobaXtrem是远程终端的超级全能神器,官网下载地址&#xff1a;MobaXterm free Xserver and tabbed SSH client for Windows 选择适合你的版本&#xff1a;一个是Home Editi…

Normalization,LayerNormalization和BatchNormalization

前言 假设我们的损失函数在空间中是一个曲面&#xff0c;这个曲面可以被我们人为的切出等高线&#xff0c;在采用梯度下降算法的时候&#xff0c;我们沿着梯度反方向迭代&#xff08;梯度方向与等高线垂直&#xff09;&#xff0c;到最后我们会抵达上图曲面的最低点。 在上面的…

学习python的第6天,痛苦焦虑的开始是期待

小号加了她的网易云音乐小号&#xff0c;成为了她的粉丝之一&#xff0c;收到她的私信回复之后&#xff0c;便又开始期待新的回复了&#xff0c;所以嘛&#xff0c;痛苦总是从开始期待开始的............. 昨天学习了python的逻辑控制之 if 和比较 .__eq__(a) 而且在最后顺带…

【开源】SpringBoot框架开发婚恋交友网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

又燃起来了!临深惠湾折扣力度持续铺排

又火了&#xff01; 6月&#xff0c;房企半年报出炉&#xff01; 房企备战“618”&#xff0c;持续安排优惠。 不排除这两天会有更大的宣传&#xff01; 房街团队收集了该市117处待售房产的折扣清单。 需要的粉丝可以扫描底部二维码获取。 上一篇公布了林深汇湾的优惠名单后…

运维SRE-17 自动化批量管理-ansible3

--- - hosts:alltasks:- name: 01 打开冰箱门shell: echo 01 >> /tmp/bingxiang.log- name: 02 把大象放进冰箱里shell: echo 02 >> /tmp/bingxiang.log- name: 03 关上冰箱门shell: echo 03 >> /tmp/bingxiang.log[rootm01 /server/ans/playbook]# cat 05-n…

(响应数据)学习SpringMVC的第三天

响应数据 一 . 传统同步业务数据响应 1.1 请求资源转发与请求资源重定向的区别 请求资源转发时,froward:可不写 二 . 前后端分离异步方式 回写json格式的字符串 1 用RestController代替Controller与 ResponseBody 2 . 直接返回user对象实体 , 即可向 前端ajax 返回json字…