spring事件监听机制

📒 Spring 事件监听机制核心笔记


一、什么是事件监听机制?

Spring 的事件监听机制是一套基于 发布-订阅(Observer)模式 实现的事件驱动模型,它允许 Bean 在不直接调用彼此的前提下,通过事件驱动解耦协作。


二、为什么需要事件监听机制?

现实中常见业务需求:

  • 用户注册后发送欢迎邮件(注册逻辑和通知逻辑解耦)

  • 订单完成后记录日志、更新库存、发MQ

  • 事务提交后再发布数据更新事件

这些操作如果全部写在一个方法中将导致高耦合、低可维护性。事件监听机制的目标是:

以事件为中心,按需解耦业务流程,提升可维护性与扩展性。


三、Spring 事件监听机制的核心组成

组件说明
ApplicationEvent所有事件的父类(可以自定义)
ApplicationListener事件监听器接口(监听某类事件)
ApplicationEventPublisher事件发布器(可注入使用)
@EventListener更简洁的监听器注解方式(Spring 4.2+)
ApplicationContext容器本身实现了发布器接口,可直接发布事件

四、事件监听的基本流程

简单理解就是:发布事件 → Spring 容器找到匹配监听器 → 回调处理方法执行

[发布者] ---> [ApplicationEventPublisher] ---> [Dispatcher] ---> [匹配监听器] ---> onEvent()

1️⃣ 创建事件类(继承或不继承 ApplicationEvent 都可)

public class UserRegisteredEvent {
    private final User user;
    public UserRegisteredEvent(User user) {
        this.user = user;
    }
}

2️⃣ 定义监听器

  • 接口方式(旧)

@Component
public class WelcomeEmailListener implements ApplicationListener<UserRegisteredEvent> {
    @Override
    public void onApplicationEvent(UserRegisteredEvent event) {
        // 发送欢迎邮件
    }
}
  • 注解方式(推荐)

@Component
public class WelcomeEmailListener {
    @EventListener
    public void handle(UserRegisteredEvent event) {
        // 发送欢迎邮件
    }
}

3️⃣ 发布事件

@Autowired
private ApplicationEventPublisher publisher;

publisher.publishEvent(new UserRegisteredEvent(user));

五、事件监听器的调用时机与线程模型

场景类型默认行为
普通事件与发布者处于同一线程(同步处理)
异步事件使用 @Async 注解实现异步监听
事务事件监听器使用 @TransactionalEventListener,可延迟到事务提交后触发

六、事务监听器机制(核心机制延伸)

使用场景:

  • 避免“事务还没提交,监听器逻辑已执行”,导致脏数据或缓存穿透

  • 适合:发MQ、改缓存、推送等需确保数据真实存在的后置动作

用法:

@EventListener
@TransactionalEventListener(phase = AFTER_COMMIT)
public void handleAfterCommit(UserRegisteredEvent event) {
    // 事务提交后再执行,如发MQ或刷新缓存
}
phase 类型含义
BEFORE_COMMIT事务提交前
AFTER_COMMIT事务提交成功后(默认)
AFTER_ROLLBACK事务回滚后
AFTER_COMPLETION无论提交还是回滚都会触发

七、底层核心机制(简要概览)

  1. 事件注册机制:所有 ApplicationListener 会被收集进容器内部监听器列表(DefaultListableBeanFactory 管理)

  2. 事件发布机制:由 ApplicationEventMulticaster 广播,默认是 SimpleApplicationEventMulticaster

  3. 调用方式:通过反射调用监听方法(同步或异步)

  4. 事务监听器原理:依赖 Spring 事务同步管理器 TransactionSynchronizationManager 注册回调(参考 afterCommit() 机制)


八、事件监听器与设计模式的关系

概念说明
观察者模式发布者-订阅者解耦核心机制
事件驱动架构构建松耦合系统的架构风格
回调机制核心依赖监听器回调执行
响应式编程是响应事件驱动的现代演进形式(如 WebFlux、RxJava)

九、总结一句话

Spring 的事件监听机制,是基于“观察者模式 + 事件驱动”的通用设计范式,具备 解耦、灵活、可扩展 的优势,是企业级应用中实现“业务协作”“事务后处理”“系统级通知”的强大工具。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值