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

Spring 事件监听机制的使用

文章目录

  • 1. 创建自定义事件
  • 2. 发布事件
  • 3. 监听事件
  • 4. 异步事件

1. 创建自定义事件

事件可以是任意对象(Spring 4.2+支持POJO),或继承ApplicationEvent(旧版)。

// 自定义事件(POJO形式,无需继承ApplicationEvent)
public class OrderCreatedEvent {private String orderId;public OrderCreatedEvent(String orderId) {this.orderId = orderId;}public String getOrderId() { return orderId; }
}

2. 发布事件

通过ApplicationEventPublisher发布事件,可在Service中注入该接口。

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;@Service
public class OrderService {private final ApplicationEventPublisher publisher;public OrderService(ApplicationEventPublisher publisher) {this.publisher = publisher;}public void createOrder(String orderId) {// 业务逻辑...// 发布事件publisher.publishEvent(new OrderCreatedEvent(orderId));}
}

3. 监听事件

使用@EventListener注解

import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;@Component
public class OrderEventListener {@EventListenerpublic void handleOrderCreated(OrderCreatedEvent event) {System.out.println("订单创建: " + event.getOrderId());// 执行后续操作,如发送邮件、更新库存等}
}

4. 异步事件

可以在启动类上加上@EnableAsync注解

@SpringBootApplication
@EnableAsync
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

在监听到消息执行对应函数的地方加上@Async注解

    @Async@EventListenerpublic void handleOrderCreated(OrderCreatedEvent event) {System.out.println("订单创建: " + event.getOrderId());System.out.println("[同步监听] 线程: " + Thread.currentThread().getName());// 执行后续操作,如发送邮件、更新库存等}
http://www.xdnf.cn/news/6122.html

相关文章:

  • flatbuffer实践
  • 操作系统实验 实验3 存储器分配与回收
  • 设计模式-中介者模式
  • Docker使用经验-从Image导出dockerfile并进行修改
  • 【Elasticsearch】DSL 篇
  • 什么是alpaca 或 sharegpt 格式的数据集?
  • Windows电脑端高效记事提醒工具推荐
  • 【ios越狱包安装失败?uniapp导出ipa文件如何安装到苹果手机】苹果IOS直接安装IPA文件
  • SCDN能够运用在物联网加速当中吗?
  • Spring Web MVC————入门(2)
  • Spark处理过程--案例数据清洗
  • 大模型越狱:技术漏洞与安全挑战——从原理到防御
  • 正向代理与反向代理区别及应用
  • 威廉・巴拉德与格理集团:在高科技浪潮中的洞察与前行
  • 【极兔快递Java社招】一面复盘|数据库+线程池+AQS+中间件面面俱到
  • 【Linux网络】————详解TCP三次握手四次挥手
  • vue3:十三、分类管理-表格--slot插槽详细说明---表格内拼接字段、tag标签
  • 怎么查看当前vue项目,要求的node.js版本
  • Oracle — PL-SQL
  • JT/T 808 各版本协议字段级别对比与解析适配建议
  • NACOS基于长链接的⼀致性模型
  • 将navicat与parcharm链接
  • 2025年中国DevOps工具选型指南:主流平台能力横向对比
  • Go语言空白导入的作用与用途
  • 【SSL部署与优化​】​​如何为网站启用HTTPS:从Let‘s Encrypt免费证书到Nginx配置​​
  • 城市生命线综合管控系统解决方案-守护城市生命线安全
  • AWS CloudTrail日志跟踪启用
  • 【计算机视觉】OpenCV实战项目:GraspPicture 项目深度解析:基于图像分割的抓取点检测系统
  • 学习51单片机01(安装开发环境)
  • 机器学习基础课程-6-课程实验