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服务注册中心应用入门详解
这篇文章主要介绍了Spring Cloud Eureka服务注册中心入门流程分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-07-07
SpringBoot前后端交互、全局异常处理之后端异常信息抛到前端显示弹窗
Spring Boot是一个用于构建独立的、基于生产级别的Spring应用程序的框架,下面这篇文章主要给大家介绍了关于SpringBoot前后端交互、全局异常处理之后端异常信息抛到前端显示弹窗的相关资料,需要的朋友可以参考下2024-08-08
springboot如何通过@Value,@ConfigurationProperties获取配置
这篇文章主要介绍了springboot如何通过@Value,@ConfigurationProperties获取配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03


最新评论