典型用法
监听自定义事件
// 定义事件类 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用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论