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用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringCloud Eureka服务注册中心应用入门详解

    SpringCloud Eureka服务注册中心应用入门详解

    这篇文章主要介绍了Spring Cloud Eureka服务注册中心入门流程分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • eclipse java工程改造为java web工程详解

    eclipse java工程改造为java web工程详解

    这篇文章主要介绍了eclipse java工程改造为java web工程详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • SpringBoot前后端交互、全局异常处理之后端异常信息抛到前端显示弹窗

    SpringBoot前后端交互、全局异常处理之后端异常信息抛到前端显示弹窗

    Spring Boot是一个用于构建独立的、基于生产级别的Spring应用程序的框架,下面这篇文章主要给大家介绍了关于SpringBoot前后端交互、全局异常处理之后端异常信息抛到前端显示弹窗的相关资料,需要的朋友可以参考下
    2024-08-08
  • 详解Spring Retry实现原理

    详解Spring Retry实现原理

    这篇文章主要介绍了详解Spring Retry实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • java实现将汉语转换为拼音功能

    java实现将汉语转换为拼音功能

    这篇文章主要介绍了java实现将汉语转换为拼音功能,非常不错,具有参考借鉴价值 ,需要的朋友可以参考下
    2017-05-05
  • SpringBoot加载外部Jar实现功能按需扩展

    SpringBoot加载外部Jar实现功能按需扩展

    这篇文章主要为大家详细介绍了SpringBoot加载外部Jar实现功能按需扩展的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-06-06
  • Springboot工具类StringUtils使用教程

    Springboot工具类StringUtils使用教程

    这篇文章主要介绍了Springboot内置的工具类之StringUtils的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • spring中的DI步骤详解

    spring中的DI步骤详解

    本文主要介绍了bean的装配实现过程,通常对于简单数据类型数据初始主要在获得对象后,使用setter方法完成,所谓的装配主要是复杂数据类型的依赖注入,感兴趣的朋友一起看看吧
    2023-11-11
  • java如何调用kettle设置变量和参数

    java如何调用kettle设置变量和参数

    文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置的变量,作者分享了个人经验,并鼓励大家参考和使用脚本之家
    2025-01-01
  • springboot如何通过@Value,@ConfigurationProperties获取配置

    springboot如何通过@Value,@ConfigurationProperties获取配置

    这篇文章主要介绍了springboot如何通过@Value,@ConfigurationProperties获取配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论