Spring事件机制之ApplicationEvent

news/2025/1/15 19:47:01/

博主介绍:✌全网粉丝4W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用ChatGPT,微信支付,扫码加群

🍅开源项目免费哦(有vue2与vue3版本):点击这里克隆或者下载 🍅

🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

Java项目案例《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12199600.html

ApplicationEvent 是 Spring Framework 中的一个核心类,用于实现事件驱动的编程模型。它是事件通知机制的核心组件,用于在 Spring 应用程序中发布和处理事件。Spring 的事件机制允许对象在特定事件发生时通知其他对象,以便实现松散耦合的组件之间的协作。

以下是关于 ApplicationEvent 的一些重要概念和用途:

  1. 事件发布者(Event Publisher): 事件通常由一个对象(事件发布者)触发或发布。这个对象可以是任何 Spring bean,通常是应用程序的某个组件或服务。
  2. 事件监听器(Event Listener): 事件监听器是能够接收和响应特定类型事件的对象。它们实现了 ApplicationListener 接口,用于处理事件。
  3. 事件对象(Event Object): 事件是由继承自 ApplicationEvent 的特定事件类实现的。这些事件类通常包含与事件相关的数据和信息。
  4. 事件发布和处理流程: 发布者发布事件,监听器订阅并处理事件。当事件被发布时,监听器会检查事件类型是否与其监听的类型匹配,如果匹配,监听器会执行自定义的处理逻辑。
  5. 松耦合: 通过事件机制,发布者和监听者之间实现了松耦合,因为它们不需要直接引用彼此,而是通过事件中介进行通信。

以下是一个简单的示例,演示了如何在 Spring 应用程序中使用 ApplicationEvent:

首先,定义一个自定义事件类,继承自 ApplicationEvent:

import org.springframework.context.ApplicationEvent;public class MyCustomEvent extends ApplicationEvent {private String message;public MyCustomEvent(Object source, String message) {super(source);this.message = message;}public String getMessage() {return message;}
}

然后,在应用程序中发布事件:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;@Service
public class MyEventPublisher {@Autowiredprivate ApplicationEventPublisher eventPublisher;public void doSomethingAndPublishEvent() {// 执行一些操作String message = "Some event data";// 创建自定义事件对象并发布MyCustomEvent event = new MyCustomEvent(this, message);eventPublisher.publishEvent(event);}
}

最后,定义一个事件监听器,以响应事件:

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;@Component
public class MyEventListener implements ApplicationListener<MyCustomEvent> {@Overridepublic void onApplicationEvent(MyCustomEvent event) {// 处理事件String message = event.getMessage();System.out.println("Received custom event with message: " + message);}
}

在这个示例中,MyEventPublisher 类发布了一个自定义事件 MyCustomEvent,而 MyEventListener 类监听并处理该事件。当 doSomethingAndPublishEvent 方法被调用时,事件被发布,监听器会捕获并处理该事件。

通过使用 ApplicationEvent 和 Spring 的事件机制,你可以实现松耦合的组件之间的协作,以及在应用程序中实现更灵活的消息传递和事件处理。这对于实现可扩展和可维护的应用程序非常有用。


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

相关文章

打赏台多合一支付收款HTML源码

多合一打赏支付收款&#xff08;微信、QQ、支付宝&#xff09; 源码直接上传到空间解压缩即可访问 PS&#xff1b;只需要将自己的收款二维码替换即可&#xff0c;或用改图工具将压缩包的&#xff08;二维码图片素材.zip&#xff09;解压缩后&#xff0c;再p图 该源码全开源无…

都说测试行业饱和了,为什么我们公司给初级测试开到了12K?

故事起因&#xff1a; 最近我有个刚毕业的学生问我说&#xff1a;我感觉现在测试行业已经饱和了&#xff0c;也不是说饱和了&#xff0c;是初级的测试根本就没有公司要&#xff0c;哪怕你不要工资也没公司要你&#xff0c;测试刚学出来&#xff0c;没有任何的项目经验和工作经验…

vue学习-07todoList案例与浏览器本地存储

TodoList Todo List&#xff08;任务列表&#xff09;是一个简单的Web应用程序示例&#xff0c;用于管理任务、代办事项或清单。Vue.js 是一个非常适合构建这种类型应用程序的框架&#xff0c;因为它提供了数据绑定、组件化、响应式和轻松管理用户界面的能力。 以下是一个基本…

七天学会C语言-第五天(函数)

1. 调用有参函数 有参函数是一种接受输入参数&#xff08;参数值&#xff09;并执行特定操作的函数。通过向函数传递参数&#xff0c;你可以将数据传递给函数&#xff0c;让函数处理这些数据并返回结果。 例1&#xff1a;编写一程序&#xff0c;要求用户输入4 个数字&#xf…

十、阶段实践练习

阶段实践练习 1.阶段实践练习1.1.练习1~~~~象棋口诀1.2.练习2~~~~输出汇款单1.3.练习3~~~~输出个人信息1.4.练习4~~~~计算月收入1.5.练习5~~~~计算商和余数1.6.练习6~~~~判断成绩能否及格1.7.练习7~~~~话费充值1.8.练习8~~~~货车装西瓜 ———————————————————…

软件需求怎么写?

前言&#xff1a;一般来说&#xff0c;软件产品的需求人员的主要输出物就是软件需求&#xff0c;如果这个软件产品就XX系统&#xff0c;人们口中的“系统需求”和“软件需求”就没有什么区别了。在车企行业&#xff0c;推行这ASPICE体系&#xff0c;在这个体系中明确申请了系统…

[Linux入门]---Linux编译器gcc/g++使用

文章目录 1.背景知识2.gcc如何完成编译运行工作预处理&#xff08;进行宏替换&#xff09;编译&#xff08;生成汇编&#xff09;汇编&#xff08;生成机器可识别代码&#xff09;链接&#xff08;生成可执行文件&#xff09; 3.函数库动态库静态库动静态库的区别 4.gcc选项 1.…

实用的嵌入式编码技巧:第三部分

每个触发器都有两个我们在风险方面违反的关键规格。“建立时间”是时钟到来之前输入数据必须稳定的最小纳秒数。“保持时间”告诉我们在时钟转换后保持数据存在多长时间。 这些规格因逻辑设备而异。有些可能需要数十纳秒的设置和/或保持时间&#xff1b;其他人则需要少一个数量…