Spring @OnApplicationEvent用法示例小结(典型用法)

 更新时间:2025年06月19日 10:41:15   作者:张紫娃  
这篇文章主要介绍了Spring @OnApplicationEvent用法示例小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

典型用法

监听自定义事件

// 定义事件类
public class UserRegisteredEvent extends ApplicationEvent {
    private final String username;
    public UserRegisteredEvent(Object source, String username) {
        super(source);
        this.username = username;
    }
    public String getUsername() {
        return username;
    }
}
// 发布事件
@Service
public class UserService {
    @Autowired
    private ApplicationEventPublisher eventPublisher;
    public void registerUser(String username) {
        System.out.println("用户注册:" + username);
        eventPublisher.publishEvent(new UserRegisteredEvent(this, username));
    }
}
// 监听事件
@Component
public class UserRegistrationListener {
    @OnApplicationEvent
    public void onUserRegistered(UserRegisteredEvent event) {
        System.out.println("监听到用户注册事件:" + event.getUsername());
    }
}

监听内置 Spring 应用事件

Spring 内置了一些标准事件,可以直接使用 @OnApplicationEvent 进行监听。

// 监听应用启动完成事件
@Component
public class StartupEventListener {
    @OnApplicationEvent
    public void onApplicationReady(ApplicationReadyEvent event) {
        System.out.println("应用已启动完成");
    }
}

异步处理事件(结合 @Async)

默认情况下,事件监听是同步执行的。若希望异步处理,可结合 @Async 注解。

@Component
public class AsyncEventListener {
    @OnApplicationEvent
    @Async
    public void handleUserRegistered(UserRegisteredEvent event) {
        System.out.println("【异步】收到用户注册事件:" + event.getUsername());
    }
}

条件过滤事件(SpEL 表达式)

可以使用 condition 属性进行条件判断,仅当满足条件时才执行监听方法。

@Component
public class ConditionalEventListener {
    @OnApplicationEvent(condition = "#event.username.startsWith('admin')")
    public void onAdminUserRegistered(UserRegisteredEvent event) {
        System.out.println("管理员用户注册:" + event.getUsername());
    }
}

多事件监听(泛型支持)

一个监听方法可以监听多个事件类型,只需将参数声明为它们的共同父类或接口。

@Component
public class MultiEventLogger {
    @OnApplicationEvent
    public void logEvent(ApplicationEvent event) {
        System.out.println("监听到事件:" + event.getClass().getSimpleName());
    }
}

到此这篇关于Spring @OnApplicationEvent用法示例小结的文章就介绍到这了,更多相关Spring @OnApplicationEvent用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springmvc处理ajax请求并返回json数据

    Springmvc处理ajax请求并返回json数据

    这篇文章主要介绍了Springmvc处理ajax请求并返回json数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java实现ZooKeeper的zNode监控

    Java实现ZooKeeper的zNode监控

    这篇文章主要介绍了Java实现ZooKeeper的zNode监控问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • MybatisPlus逆向工程的项目实践

    MybatisPlus逆向工程的项目实践

    Mybatis-Plus逆向工程,是MP官方提供的一款代码生成器,可以自动生成对应的实体类、Mapper接口和配置文件,,本文主要介绍了MybatisPlus逆向工程的项目实践,感兴趣的可以了解一下
    2024-03-03
  • Java字符串的处理方式及作用介绍

    Java字符串的处理方式及作用介绍

    StringBuilder、StringBuffer 和 String是Java中处理字符串的三种主要方式,每种有不同的特点和适用场景,下面给大家介绍Java字符串的处理方法及作用介绍
    2025-04-04
  • JavaWeb实现文件上传下载功能实例解析

    JavaWeb实现文件上传下载功能实例解析

    这篇文章主要为大家详细介绍了JavaWeb中的文件上传和下载功能的实现,在Web应用系统开发中,文件上传和下载功能是非常常用的功能,需要的朋友可以参考下
    2015-08-08
  • Java获取最后插入MySQL记录的自增ID值的3种方法

    Java获取最后插入MySQL记录的自增ID值的3种方法

    这篇文章介绍了Java获取最后插入MySQL记录的自增ID值的3种方法,有需要的朋友可以参考需要
    2013-08-08
  • 关于java中线程安全问题详解

    关于java中线程安全问题详解

    最近工作中遇到不少多线程问题,但自己一直对多线程的理解比较表层,所以深入研究了一番,下面这篇文章主要给大家介绍了关于java中线程安全问题的相关资料,需要的朋友可以参考下
    2021-11-11
  • Java 中的 Function 接口案例讲解

    Java 中的 Function 接口案例讲解

    Java8引入Function和Consumer函数式接口,用于处理输入输出及单参数操作,支持基本类型和多参数变体,应用于StreamAPI、策略模式及异常处理包装,提升代码简洁性与性能,本文给大家介绍Java中的Function接口案例,感兴趣的朋友一起看看吧
    2025-06-06
  • Spring AOP详解面向切面编程思想

    Spring AOP详解面向切面编程思想

    Spring是一个广泛应用的框架,SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,对项目开发提供了极大地便利
    2022-06-06
  • Java绘制迷宫动画并显示的示例代码

    Java绘制迷宫动画并显示的示例代码

    这篇文章主要为大家详细介绍了如何利用Java语言实现绘制迷宫动画并显示,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-08-08

最新评论