【发布时间】:2018-09-01 01:52:16
【问题描述】:
在我的应用程序中,我有带有多个 SpEL 表达式的对象,这些表达式通常包含带有 boolean 返回类型的方法签名以调用和逻辑运算符。在缓存这些对象之前,我通过简单地执行解析的表达式来检查表达式的一致性。当抛出异常时,我在对象内部设置了一个适当的标志来指示表达式无效以避免进一步执行。
我正在EvaluationContext 上执行表达式,该表达式实现了允许成为表达式一部分的所有方法。所有这些方法都返回false。我遇到了一个涉及短路评估的问题。
鉴于 methodOne 和 methodTwo 是唯一允许调用的方法,此表达式正确设置了不一致标志
methodERROROne("arg") AND methodTwo("arg")
然而,这不是因为methodOne 返回false,Spring 使用短路评估并且不执行剩余的操作数。这会导致表达式在实际 EvaluationContext 上执行时失败,methodOne 返回 true
methodOne("arg") AND methodERRORTwo("arg")
有没有办法禁用短路评估是 Spring 表达式语言?
【问题讨论】:
-
查看我的答案的编辑 - 如果您的所有方法都返回 false,您可以否定它们以强制对它们进行评估。