Spring 4.3中@EventListener条件表达式引用参数报错问题
解决Spring 4.3 @EventListener条件表达式报错问题
错误原因
Spring 4.3中,@EventListener的condition表达式根对象是EventExpressionRootObject,它仅暴露名为event的属性来引用事件实例,而非你定义的方法参数名processEvent。直接使用processEvent.getRequestId()会导致SpEL无法找到对应属性,触发报错。
正确配置方式
方式一:直接用event访问事件属性
利用SpEL的属性访问语法(等价于调用getter方法),修改condition表达式:
@EventListener(condition = "event.requestId != null") @Async public void handleProcessEvent(ProcessEvent processEvent) { // 业务处理逻辑 }
方式二:显式通过#root.event引用事件对象
如果需要更明确的根对象引用,也可以写成:
@EventListener(condition = "#root.event.requestId != null") @Async public void handleProcessEvent(ProcessEvent processEvent) { // 业务处理逻辑 }
补充说明
从Spring 5.2开始,@EventListener支持直接用方法参数名作为SpEL变量,但Spring 4.3不具备该特性,因此必须通过根对象的event属性访问事件实例。
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

