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

Spring Boot 事件监听机制实战【自定义 Spring Boot 事件监听】

前言:

上一篇我们分析了 Spring Boot 事件监听的原理,本篇我们来自定义实现自己的监听器。

Spring Boot 系列文章传送门

Spring Boot 启动流程源码分析(2)

Spring Boot 启动流程源码分析(2)

Spring Boot 自动配置实现原理(源码分析)

Spring Boot 自定义 starter 启动器

Spring Boot 事件监听机制工作原理

Spring Boot 自定义监听器

创建 Spring Boot 自定义监听器通常要经过一下步骤

  1. 定义事件。
  2. 定义事件监听器。
  3. 定义事件发布器。
  4. 触发事件,完成验证。

定义事件

定义 Event 事件,MyEvent 继承了 ApplicationEvent 类,如果我们要使用 Spring 的事件监听机制,那我们定义的 Event 事件必须继承ApplicationEvent ,否则就无法使用。

public class MyEvent extends ApplicationEvent {private final String event;public MyEvent(Object source, String event) {super(source);this.event = event;}public String getEvent() {return event;}}

定义事件监听器

事件监听器实现了 ApplicationLister 接口,泛型为 ApplicationEvent,因为要监听事件,所以必须按照 Spring 的规则来,onApplicationEvent 方法就是监听到的事件,在这里可以完成业务逻辑处理,因为事件监听器需要加入Spring IOC 容器中才能生效,因此 MyListener 使用了 @Component 注解。

@Slf4j
@Component
public class MyListener implements ApplicationListener<MyEvent> {@Overridepublic void onApplicationEvent(MyEvent myEvent) {//监听器调用事件方法String event = myEvent.getEvent();log.info("event:{}",event);}
}

定义事件发布器

Sprin Boot 监听器要生效,必须要有一个时间发布器,自定了一个事件发布器,注入了 ApplicationEventPublisher,使用 ApplicationEventPublisher#publishEvent 方法完成事件发布。

@Component
public class MyPublisher {@Resourceprivate ApplicationEventPublisher applicationEventPublisher;public void publish(){applicationEventPublisher.publishEvent(new MyEvent(new MyListener(),"publish event  test"));}
}

触发事件,完成验证

我们这里直接使用 Spring Boot 启动类来完成事件发布测试,如下:

@SpringBootApplication
public class MyStudySpringBootApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(MyStudySpringBootApplication.class, args);MyPublisher publisher = context.getBean(MyPublisher.class);publisher.publish();}}

测试结果:

2024-06-30 21:35:42.926  INFO 29928 --- [main] com.my.study.start.listener.MyListener   : event:publish event  test

结果符合预期,这样我们就完成了一个简单的自定义事件监听,一般来说,我们在项目开发中是使用不到事件监听机制的,但是源码中大量使用了监听机制,因为我们还是需要了解监听器是怎样实现的。

自定义监听器的注解实现方式

使用 @EventListener 注解,代码如下:

@Slf4j
@Component
public class MyAnnotationListener {@EventListenerpublic void handleCustomEvent(MyEvent myEvent) {//监听器调用事件方法String event = myEvent.getEvent();log.info("event2:{}", event);}}

欢迎提出建议及对错误的地方指出纠正。

http://www.lryc.cn/news/391650.html

相关文章:

  • AIGC笔记--Stable Diffusion源码剖析之DDIM
  • 【BUUCTF-PWN】13-jarvisoj_level2_x64
  • 项目实战--Spring Boot 3整合Flink实现大数据文件处理
  • 开发者工具攻略:前端测试的极简指南
  • git保存分支工作状态
  • 系统架构设计师——计算机体系结构
  • 3D鸡哥又上开源项目!单图即可生成,在线可玩
  • 设计模式实现思路介绍
  • Node.js学习教程
  • 项目页面优化,我们该怎么做呢?
  • 【PCIe】P2P DMA
  • Linux shell编程学习笔记62: top命令 linux下的任务管理器
  • 如何在Java中实现高性能的网络通信
  • 政务单位网站SSL证书选择策略
  • 零基础入门 Ai 数据挖掘竞赛-速通 Baseline-1
  • 第二十六章 生成器(generator)(Python)
  • Vue通过Key管理状态
  • 鸿蒙 HarmonyOs 网络请求 快速入门
  • Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本(helm部署)
  • 如何使用Pip生成requirements.txt文件:全面指南与实践示例
  • 微信小程序消息通知(一次订阅)
  • 电传动无杆飞机牵引车交付用户
  • react框架,使用vite和nextjs构建react项目
  • Games101学习笔记 Lecture16 Ray Tracing 4 (Monte Carlo Path Tracing)
  • 数据结构概念
  • Windows 下载安装ffmpeg
  • Java AI 编程助手
  • day10:01集合
  • 03浅谈提示工程、RAG和微调
  • 硅纪元视角 | AI纳米机器人突破癌症治疗,精准打击肿瘤细胞