砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • spring_boot

    • SpEL(表达式)

      • 概念
      • 常用命令
      • nginx安装和部署
  • spring_cloud

    • 入门

      • SpEL(表达式)

        • 概念
        • 常用命令
        • nginx安装和部署
  • spring_core

    • SpEL(表达式)

      • 概念
      • 常用命令
      • nginx安装和部署
    • spring event

      • spring event入门
      • spring event高性能
      • spring event顺序和条件
      • spring event泛化
  • spring_tools

    • 入门

      • SpEL(表达式)

        • 概念
        • 常用命令
        • nginx安装和部署
  • spring|spring event|Spring内置事件驱动编程模型|顺序和条件
    • 事件执行谁来决定
    • 源码
    • 核心流程图解
    • 条件触发(Condition)结合SpEL表达式
    • 顺序触发(Order)没有order最后执行

spring|spring event|Spring内置事件驱动编程模型|顺序和条件

事件执行谁来决定

类型匹配(Type Match)、条件过滤(Condition Filter) 和顺序排序(Ordering)共同决定了事件最终由谁执行、何时执行

源码

https://gitee.com/jysemel-spring/spring-boot/tree/master/action/action-event-order

核心流程图解

第一步(类型匹配) -> 第二步(顺序排序) -> 第三步(条件过滤) -> 第四步(事务相位对齐) -> 执行

条件触发(Condition)结合SpEL表达式

  • 代码演示
package com.jysemel.spring.boot.study.listener;


import com.jysemel.spring.boot.study.event.UserRegisteredEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 方式二:使用@EventListener注解(更推荐)
 */
@Slf4j
@Component
public class CouponListener {


    @Async("eventExecutor")
    @EventListener
    public void handleUserRegisteredEvent(UserRegisteredEvent event) throws InterruptedException {
        log.info("默认 全量监控 ");
        log.info("赠送新人优惠券给用户:{} ", event.getNickName());
    }
}
package com.jysemel.spring.boot.study.listener;


import com.jysemel.spring.boot.study.event.UserRegisteredEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * 方式二:使用@EventListener注解(更推荐)
 */
@Slf4j
@Component
public class CouponListener1 {



    @Async("eventExecutor")
    @EventListener(condition = "#event.userName == 'test'")
    public void handleUserRegisteredEvent(UserRegisteredEvent event) throws InterruptedException {
        log.info("满足 test ");
        log.info("赠送新人优惠券给用户:{} ", event.getNickName());
    }
}
package com.jysemel.spring.boot.study.listener;


import com.jysemel.spring.boot.study.event.UserRegisteredEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * 方式二:使用@EventListener注解(更推荐)
 */
@Slf4j
@Component
public class CouponListener2 {



    @Async("eventExecutor")
    @EventListener(condition = "#event.userName == 'ddd'")
    public void handleUserRegisteredEvent(UserRegisteredEvent event) throws InterruptedException {
        log.info("满足 ddd ");
        log.info("赠送新人优惠券给用户:{} ", event.getNickName());
    }
}
  • 请求访问 http://127.0.0.1:8083/api/user/reg?userName=test&nickName=222

  • 验证结果

2026-07-14 14:32:19.502 [http-nio-8083-exec-7] [] INFO  com.jysemel.spring.boot.study.controller.UserRegController - 用户注册:test
2026-07-14 14:32:19.502 [http-nio-8083-exec-7] [] INFO  com.jysemel.spring.boot.study.service.StoreService - 用户 222   注册成功
2026-07-14 14:32:19.504 [event-async-4] [] INFO  com.jysemel.spring.boot.study.listener.CouponListener - 默认 全量监控 
2026-07-14 14:32:19.504 [event-async-4] [] INFO  com.jysemel.spring.boot.study.listener.CouponListener - 赠送新人优惠券给用户:222 
2026-07-14 14:32:19.504 [event-async-5] [] INFO  com.jysemel.spring.boot.study.listener.CouponListener1 - 满足 test 
2026-07-14 14:32:19.504 [event-async-5] [] INFO  com.jysemel.spring.boot.study.listener.CouponListener1 - 赠送新人优惠券给用户:222 

顺序触发(Order)没有order最后执行

  • 代码演示
package com.jysemel.spring.boot.study.listener;


import com.jysemel.spring.boot.study.event.UserRegisteredEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 方式二:使用@EventListener注解(更推荐)
 */
@Slf4j
@Component
public class OrderListener1 {


    @EventListener
    @Async("eventExecutor")
    @Order(1)
    public void handleUserRegisteredEvent(UserRegisteredEvent event) throws InterruptedException {
        log.info("我是顺序一...................... ");
        log.info("赠送新人优惠券给用户:{} ", event.getNickName());
    }
}
package com.jysemel.spring.boot.study.listener;


import com.jysemel.spring.boot.study.event.UserRegisteredEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 方式二:使用@EventListener注解(更推荐)
 */
@Slf4j
@Component
public class OrderListener2 {


    @EventListener
    @Async("eventExecutor")
    @Order(99)
    public void handleUserRegisteredEvent(UserRegisteredEvent event) throws InterruptedException {
        log.info("我是顺序二......................排序99 ");
        log.info("赠送新人优惠券给用户:{} ", event.getNickName());
    }
}
  • 演示结果

http://127.0.0.1:8083/api/user/reg?userName=test&nickName=222

2026-07-14 14:49:06.177 [http-nio-8083-exec-1] [] INFO  com.jysemel.spring.boot.study.controller.UserRegController - 用户注册:test
2026-07-14 14:49:06.178 [http-nio-8083-exec-1] [] INFO  com.jysemel.spring.boot.study.service.StoreService - 用户 222   注册成功
2026-07-14 14:49:11.194 [event-async-3] [] INFO  com.jysemel.spring.boot.study.listener.CouponListener - 默认 全量监控 
2026-07-14 14:49:11.194 [event-async-1] [] INFO  com.jysemel.spring.boot.study.listener.OrderListener1 - 我是顺序一...................... 
2026-07-14 14:49:11.194 [event-async-2] [] INFO  com.jysemel.spring.boot.study.listener.OrderListener2 - 我是顺序二......................排序99 
2026-07-14 14:49:11.194 [event-async-1] [] INFO  com.jysemel.spring.boot.study.listener.OrderListener1 - 赠送新人优惠券给用户:222 
2026-07-14 14:49:11.194 [event-async-2] [] INFO  com.jysemel.spring.boot.study.listener.OrderListener2 - 赠送新人优惠券给用户:222 
2026-07-14 14:49:11.194 [event-async-3] [] INFO  com.jysemel.spring.boot.study.listener.CouponListener - 赠送新人优惠券给用户:222 
2026-07-14 14:49:11.209 [event-async-4] [] INFO  com.jysemel.spring.boot.study.listener.CouponListener1 - 满足 test 
2026-07-14 14:49:11.209 [event-async-4] [] INFO  com.jysemel.spring.boot.study.listener.CouponListener1 - 赠送新人优惠券给用户:222 
最近更新: 2026/7/16 15:24
Contributors: kcnf
Prev
spring event高性能
Next
spring event泛化