Jexl和Spel表达式解析对内部类的支持

阅读: 评论:0

Jexl和Spel表达式解析对内部类的支持

Jexl和Spel表达式解析对内部类的支持

项目中用到了把字符串解析成java表达式的功能,一开始用的Apache的Jexl,但是Jexl不支持对内部类方法调用的解析,经过尝试发现Spel可以。现对这两者进行一个总结。

假设有如下类

public class Out {private String name = "zzj";class In {public void helloIn() {System.out.println("i am helloIn");System.out.println(Out.this.name);}}
}

 

现有一个字符串如下,需要把字符串解析为对内部类In的helloIn方法的调用

"in.helloIn()"
//解析字符串以达到如下调用效果
Out out = new Out();
Out.In in = w In();
in.helloIn();

 

用Jexl解析

Out out = new Out();
Out.In in = w In();
JexlEngine jexl = new JexlBuilder().create();
JexlExpression expression = ateExpression("in.helloIn()");
JexlContext context = new MapContext();
context.set("in", in);
Object value = expression.evaluate(context);
System.out.println(value);//解析不成功,报如下错误
Exception in thread "main" org.apachemons.jexl3.JexlException$Method: j.springboot.outin.Main.main@1:3 unsolvable function/method 'helloIn'j.springboot.outin.Main.main(Main.java:17)

 

用Spel解析

ExpressionParser parser = new SpelExpressionParser();
EvaluationContext ctx = new StandardEvaluationContext();
ctx.setVariable("in", in);
Object value = parser.parseExpression("#in.helloIn()").getValue(ctx);
System.out.println(value);//解析成功,打印如下结果
i am helloIn
zzj
null   //因为返回值是void,所以value是null

 

 

 

本文发布于:2024-01-28 07:03:26,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063966235657.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:部类   表达式   Jexl   Spel
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23