MVEL是一个功能强大的基于Java应用程序的表达式语言。
目前最新的版本是2.0,具有以下特性:
(1). 动态JIT优化器。当负载超过一个确保代码产生的阈值时,选择性地产生字
节代码,这大大减少了内存的使用量。新的静态类型检查和属性支持,允许集成
类型安全表达。
(2). 错误报告的改善。包括行和列的错误信息。
(3). 新的脚本语言特征。MVEL2.0 包含函数定义,如:闭包,lambda定义,
标准循环构造(for, while, do-while, do-until…),空值安全导航操作,内联with
-context运营 ,易变的(isdef)的测试运营等等。
(4). 改进的集成功能。迎合主流的需求,MVEL2.0支持基础类型的个性化属性处理器,集成到JIT中。
(5). 更快的模板引擎,支持线性模板定义,宏定义和个性化标记定义。
(6). 新的交互式shell(MVELSH)。(7). 缺少可选类型安全
(8). 集成不良,通常通过映射填入内容。没有字节码不能运作用字节码生成编
译时间慢,还增加了可扩展性问题;不用字节码生成运行时执行非常慢
(9). 内存消耗过大
(10). Jar巨大/依赖规模
使用代码:
@Testpublic void evalList(){String expression = "['Jim','Bob','Tom']";List<String> list = (List<String>) MVEL. eval(expression);for(String str : list){System. out.println(str);}}@Testpublic void evalArray(){String expression = "{'Jim','Bob','Tom'}";Object array = MVEL.eval(expression);if(array.getClass().isArray()){System.out.println(Array.get(array, 0));}String intExpress = "{1,2,3,4}";Object eval = MVEL.eval(intExpress);if(eval.getClass().isArray()){Object o = Array.get(eval, 0);System.out.println((int)o);}}@Testpublic void evelMap(){
// String expression = "a == empty && b == empty";
// Map<String, Object> paramMap = Maps.newHashMap();
// paramMap.put("a", "");
// paramMap.put("b", null);
// Object object = MVEL.eval(expression, paramMap);
// System.out.println(object); // true// String expression = "a == b";
// Map<String, Object> paramMap = Maps.newHashMap();
// paramMap.put("a", "123");
// paramMap.put("b", 123);
// Object object = MVEL.eval(expression, paramMap);
// System.out.println(object); // trueString express = "[\"Bob\" : new com.rec.pojo.Person(\"Bob\"), \"Michael\" : new com.rec.pojo.Person(\"Michael\")]";Map eval = (Map)MVEL.eval(express);System.out.println(eval.entrySet());}
参考文章: https://www.jianshu.com/p/41ea7a43093c