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

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());// 执行后续操作,如发送邮件、更新库存等}

相关文章:

  • Spring 中的 @Configuration @Bean注解
  • UE5 像素推流
  • 在UI 原型设计中,交互规则有哪些核心要素?
  • 数值积分知识
  • 【嵌入模型与向量数据库】
  • 阿里巴巴java开发手册
  • jupeter 安装流程
  • dify 连接不上ollama An error occurred during credentials validation:
  • 基于EFISH-SCB-RK3576/SAIL-RK3576的智慧路灯控制器技术方案
  • mysql数据库配置
  • 【大模型】OpenManus 项目深度解析:构建通用 AI Agent的开源框架
  • Java—— 双列集合Map的实现类
  • 网络套接字(二)
  • vue2+ThinkPHP5实现简单大文件切片上传
  • 软件逆向基础-扫雷篇
  • copy_paste
  • 力扣-98.验证二叉搜索树
  • OA 系统办公自动化包含哪些内容,关键功能模块与操作要点说明
  • CodeBuddy 接入 MCP,一键生成网站!
  • 操作系统期末复习笔记
  • 北方产粮大省遭遇气象干旱,夏粮用水如何解决?
  • 体坛联播|C罗儿子完成国家队首秀,德约结束与穆雷合作
  • 美国务卿鲁比奥将前往土耳其参加俄乌会谈
  • 日本广岛大学一处拆迁工地发现疑似未爆弹
  • 普京提议无条件重启俄乌谈判,外交部:我们支持一切致力于和平的努力
  • 巫蛊:文化的历史暗流