SpringBoot如何创建监听器?

server/2024/9/22 15:41:17/

在Java中,监听器(Listener)是一种设计模式,它允许对象在 特定事件 发生时 自动执行某些操作 。这种设计模式通常用于实现 发布-订阅模型 ,其中监听器(订阅者)订阅了某个对象(发布者)的事件,当该事件发生时,监听器会收到通知并执行相应的操作。

文章目录

    • 监听器的作用
    • 实现 ApplicationListener 监听事件
    • 使用 @EventListener 注解监听事件

监听器的作用

  • 解耦:通过监听器,可以将 事件发送者事件处理者 解耦,使得两者之间的依赖关系降低。
  • 事件驱动:监听器允许程序以 事件驱动 的方式运行,即当特定事件发生时,自动触发相应的处理逻辑。
  • 跨组件通信:在不同组件或模块之间,可以通过监听器实现通信和协作。

在Spring Boot中,可以通过实现 Spring 提供的监听器接口或注解来创建监听器。Spring提供了多种类型的监听器,包括 ApplicationListener 用于监听应用事件, @EventListener 注解用于监听特定事件等。

ApplicationEvent 是Spring框架中的一个核心类,用于在应用程序中 发布和监听事件 。它是所有Spring事件的 基类 ,一个抽象类,可以被继承来创建自定义的事件。事件可以在应用程序中的不同组件之间进行传递和通信。

ApplicationEvent 携带一个 Object 对象,可以被发布,事件监听者监听到这个事件后,会触发自定义逻辑(操作Object对象)。是实现事件驱动编程的重要机制,通过事件和监听器的协作,可以实现不同组件之间的解耦和高效通信。

实现 ApplicationListener 监听事件

1、创建 CustomEvent 事件类

java">import org.springframework.context.ApplicationEvent;public class CustomEvent extends ApplicationEvent { // CustomEvent需要继承自ApplicationEventprivate String message;public CustomEvent(Object source, String message) {super(source);this.message = message;}public String getMessage() {return message;}
}

2、自定义监听器,监听事件类

java">import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;@Component
public class CustomEventListener implements ApplicationListener<CustomEvent> {@Overridepublic void onApplicationEvent(CustomEvent event) {// 当CustomEvent事件被发布时,这个方法会被调用System.out.println("监听事件成功 - " + event.getMessage());// 在这里编写处理事件的逻辑// 比如对消息进行合规处理}
}

3、触发监听事件

java">import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;@Component
public class EventPublisher {private final ApplicationContext applicationContext;@Autowiredpublic EventPublisher(ApplicationContext applicationContext) {this.applicationContext = applicationContext;}public void publishCustomEvent(String message) {// 发布CustomEventCustomEvent customEvent = new CustomEvent(this, message);applicationContext.publishEvent(customEvent);}
}

publishCustomEvent 方法被调用并发布 CustomEvent 时,所有实现了 ApplicationListener<CustomEvent> 的监听器都会收到通知,并执行onApplicationEvent方法。

使用 @EventListener 注解监听事件

如果你想要使用注解来创建监听器,可以使用@EventListener注解:

java">import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;@Component
public class AnnotationBasedEventListener {@EventListenerpublic void handleCustomEvent(CustomEvent event) {// 当CustomEvent事件被发布时,这个方法会被调用System.out.println("监听事件成功 - " + event.getMessage());// 在这里编写处理事件的逻辑// 比如对消息进行合规处理}
}

使用 @EventListener 注解可以简化监听器的创建过程,并且可以在 方法级别上 指定需要监听的事件类型。

无论是通过实现接口还是使用注解,Spring Boot都提供了以实现事件驱动的应用程序逻辑。


http://www.ppmy.cn/server/8057.html

相关文章

web server apache tomcat11-06-Host Manager App

前言 整理这个官方翻译的系列&#xff0c;原因是网上大部分的 tomcat 版本比较旧&#xff0c;此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎&#xff0c;轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

单页面首屏优化,打包后大小减少64M,加载速度快了13.6秒

需求背景 从第三方采购的vue2 ElementUI实现的云管平台&#xff0c;乙方说2011年左右就开始有这个项目了&#xff08;那时候有Vue了吗&#xff0c;思考.jpg&#xff09;。十几年的项目&#xff0c;我何德何能可以担此责任。里面的代码经过多人多年迭代可以用惨不忍睹来形容&a…

ElasticSearch 创建索引超时(ReadTimeoutError)

报错现象 在 Python 中调用 client.indices.create 来创建 ElasticSearch 索引时&#xff0c;报如下错误&#xff1a; elastic_transport.transport - INFO - PUT http://127.0.0.1:9200/document_page?timeout60s [status:N/A duration:10.011s] elastic_transport.node_po…

C#随机数

随机数&项目调试 随机数 文章目录 随机数1、创建随机数对象2、生成随机数思考 打怪兽 项目调试 1、创建随机数对象 Random r 随机数变量名 new Random();2、生成随机数 Randowm r new Random(); int i r.Next(); //生成一个非负数的随机数 Console.WriteLine(i); i …

回溯算法练习day.4

93.复原ip地址 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"…

[2024更新]如何从Android恢复已删除的相机照片?

相信大家都经历过Android手机误删相机图片的经历。您是否正在寻找一种可行的方法来挽救这些丢失的照片&#xff1f;如果这是你迫切想解决的问题&#xff0c;那么这篇文章绝对可以帮助你。然而&#xff0c;与其考虑如何从Android恢复已删除的相机照片&#xff0c;我们更愿意建议…

图论——基础概念

文章目录 学习引言什么是图图的一些定义和概念图的存储方式二维数组邻接矩阵存储优缺点 数组模拟邻接表存储优缺点 边集数组优缺点排序前向星优缺点链式前向星优缺点 学习引言 图论&#xff0c;是 C 里面很重要的一种算法&#xff0c;今天&#xff0c;就让我们一起来了解一下图…

12.Ribbon饥饿加载

Ribbon默认是懒加载的&#xff0c;第一次使用Ribbon访问的时候才会去实例化对象&#xff0c;所以第一次访问比较耗时。 ribbon:eager-load:enabled: true # 开启饥饿加载clients: user-service #对user-service这个服务饥饿加载 多个微服务的写法&#xff1a; ribbon:eager-loa…