注意调用函数方式
在 Spring Expression Language(SpEL)中,对于静态方法和非静态方法的调用有一些区别和要求。
静态方法调用
静态方法可以直接通过类名调用,例如:
"T(com.yzw.ajzx.rhzx.rules.service.impl.RulesServiceImpl).tdhAjxqInfo(#aj.bh, #aj.fydm, #aj.sfId).ajjbxx.ah == '20240315hangzhou'"
在上述示例中,T(com.yzw.ajzx.rhzx.rules.service.impl.RulesServiceImpl) 表示引用 RulesServiceImpl 类,并调用其静态方法 tdhAjxqInfo。SpEL 能够直接识别静态方法的调用并执行。
非静态方法调用
对于非静态方法,SpEL 需要访问对象的实例。通常情况下,Spring 的容器会管理 bean 实例,并通过表达式语言引用这些实例的方法。例如:
"rulesService.tdhAjxqInfo(#aj.bh, #aj.fydm, #aj.sfId).ajjbxx.ah == '20240315hangzhou'"
在这个例子中,rulesService 是一个 Spring 管理的 RulesServiceImpl 的实例,可以直接调用其中的非静态方法 tdhAjxqInfo。
str="T(com.yzw.ajzx.rhzx.rules.service.impl.RulesServiceImpl).checkScParams(#aj.bh,#aj.fydm,#aj.sfId).jbxx.sfId == '111'";
SpelExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("aj", ysaj);
context.setVariable("qxaj", sscyrVOList);
Expression exp = parser.parseExpression(str);
System.out.print(exp.getValue(context, String.class));