Sping事件发布机制

news/2024/10/18 18:15:42/

一、Spring事件发布     

        Spring事件发布机制是一种非常重要的通信方式,使用观察者设计模式,可以用于状态通知、业务解耦、异步处理的业务场景。

        Spring事件发布对应的几个概念:

 1、事件及事件源(ApplicationEvent)

      对应于观察者模式中的主题,事件源发生某事件是特定事件监听器被触发的原因。Spring的ApplicationEvent是事件类,事件源soruce作为ApplicationEvent的一个属性维护,有用户自定义传入。

2、事件发布器(ApplicationEventPublisher)

       事件发布器可以认为是事件监听的容器,对外提供发布事监听器的接口,通过publishEvent方法维护事件和事件监听器之间的映射关系,并在事件发生时负责通知事件监听器。

3、事件监听器

     监听器监听事件源发布事件,由用户自行定义,使用@EventListener注解在方法上即可。

二、编码示例

1、定义事件源

java">@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString
public class CommonSource {/**事件类型*/private int sourceType;/**消息体*/private  Object sourceData;
}

2、自定义事件

java">public class CommonEvent  extends ApplicationEvent {public CommonEvent(CommonSource source) {super(source);}@Overridepublic CommonSource getSource() {return (CommonSource) source;}
}

3、定义事件发布器

java">@Component
public class CommonEventPublisher  implements ApplicationEventPublisherAware {private static ApplicationEventPublisher  applicationEventPublisher;@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {CommonEventPublisher.applicationEventPublisher = applicationEventPublisher;}public static void  sendEvent(CommonEvent event) {CommonEventPublisher.applicationEventPublisher.publishEvent(event);}}

4、事件发布与监听

      事件发布

java"> CommonEventPublisher.sendEvent(new CommonEvent(new CommonSource(1,"郭有才")));

     事件监听

java">    @EventListenerpublic   void  onEvent(CommonEvent event){CommonSource source = event.getSource();System.out.println("event----source=>"+source);int sourceType = source.getSourceType();if(sourceType==1){/// 处理业务逻辑}}


http://www.ppmy.cn/news/1470461.html

相关文章

虚拟机使用桥接模式网络配置

1、获取本机的网络详细信息 windowr 输入cmd 使用ipconfig -all 一样即可 在自己的虚拟机中设置网络 虚拟机中的ip ---------192.168.36.*,不要跟自己的本机ip冲突 网关-----------192.168.36.254 一样即可 dns -----------一样即可,我多写了几个&am…

HTML5 新元素

HTML5 新元素 HTML5是最新版本的HTML,引入了许多新元素和功能,以更好地满足现代网页设计的需要。这些新元素不仅增强了网页的表现力,还提高了代码的可读性和可维护性。本文将详细介绍HTML5中的新元素,包括它们的功能和用法。 1.…

lighttpd cgi不能重启

1. 背景 cgi出现coredump后&#xff0c;lighttpd不能拉动cgi重启。 2. 重现问题 2.1. cgi实现 /*! cgi简单实现 */ #include <stdio.h> #include <fcgiapp.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <s…

【SCAU数据挖掘】数据挖掘期末总复习题库简答题及解析——上

1.K-Means 假定我们对A、B、C、D四个样品分别测量两个变量&#xff0c;得到的结果见下表。 样品 变量 X1X2 A 5 3 B -1 1 C 1 -2 D -3 -2 利用K-Means方法将以上的样品聚成两类。为了实施均值法(K-Means)聚类&#xff0c;首先将这些样品随意分成两类(A、B)和(C、…

巡检机器人智能联网,促进工厂自动化

随着工业4.0和智能制造的快速发展&#xff0c;企业引入自动化设备和智能机器人以提高生产效率和降低人工成本已成为大势所趋。其中&#xff0c;巡检机器人作为一种能够在复杂和危险环境中进行自动巡检的设备&#xff0c;受到了广泛关注。如何实现巡检机器人稳定、安全的联网是每…

windows桌面运维----第六天

1、操作系统蓝屏的通常解决办法有哪些&#xff1f; 第一种方法&#xff1a;重启电脑。首先尝试重启电脑&#xff0c;有时简单的重启可以解决临时的问题。 第二种方法&#xff1a;检查硬件连接。确保所有硬件设备&#xff08;如内存条、硬盘、显卡等&#xff09;都正确连接&am…

2024广东省职业技能大赛云计算赛项实战——容器化部署Redis

容器化部署Redis 前言 编写Dockerfile文件构建redis镜像&#xff0c;要求基于centos完成Redis服务的安装和配置&#xff0c;并设置服务开机自启。 编写Dockerfile构建镜像erp-redis:v1.0&#xff0c;要求使用centos7.9.2009镜像作为基础镜像&#xff0c;完成Redis服务的安装&…

Linux ls-al命令实现,tree命令实现,不带缓存的文件IO(open,read,write)

shell命令 ls -al 实现 #include <43func.h> void error_check(int ret, const char *msg) {if (ret -1) {perror(msg);exit(EXIT_FAILURE);} }char get_file_type(mode_t mode) {if (S_ISREG(mode)) return -;//检查给定的文件模式&#xff08;通常是从 stat 或 lst…