jexl

一、名词解释

1.JexlExpression与JexlScript的区别

1)JexlExpression    这些是JexlEngine表达式的最基本形式,只允许执行单个命令并返回其结果。如果您尝试使用多个命令,它会忽略第一个分号后的所有内容,只返回第一个命令的结果。

另请注意,表达式不是语句(这是脚本的组成部分),并且不允许使用流控制(if,while,for),变量或lambdas语法元素。

2)JexlScript    这些允许您使用多个语句,您可以使用变量赋值,循环,计算等。或多或少可以在Shell或JavaScript的基本级别实现。从脚本返回最后一个命令的结果。

2.简单示例

在最简单的形式中,JEXL 在评估表达式时将a JexlExpression 与a 合并 JexlContext。使用JexlEngine.createExpression(java.lang.String)传递包含有效JEXL语法的String 创建表达式 。可以使用MapContext实例创建简单的JexlContext ; 可以通过其构造函数选择提供内部包装的变量映射。以下示例采用名为“car”的变量,并在属性“engine”上调用checkStatus()方法  //创建一个JexlEngine(可以重用一个)          

JexlEngine jexl = new JexlBuilder().create();

            // Create an expression object equivalent to 'car.getEngine().checkStatus()':

            String jexlExp = "car.engine.checkStatus()";

            Expression e = jexl.createExpression( jexlExp );

            // The car we have to handle coming as an argument...

            Car car = theCarThatWeHandle;

            // Create a context and add data

            JexlContext jc = new MapContext();

            jc.set("car", car );

            // Now evaluate the expression, getting the result

            Object o = e.evaluate(jc);

二、jexl工具类

public class JexlUtil {

private static JexlEngineengine;

private JexlUtil() {

}

private static JexlEngine getJexlEngine() {

if (engine ==null) {

synchronized (JexlUtil.class) {

if (engine ==null) {

engine =new JexlBuilder().create();

}

}

}

return engine;

}

public static Object execute(String expression, JexlContext context) {

JexlEngine jexlEngine =getJexlEngine();

JexlScript script = jexlEngine.createScript(expression);

return script.execute(context);

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,802评论 18 399
  • 今天在家追小说了,很是不可思议,放着大把时间不珍惜,看了小说一边觉得幼稚一边还忍不住往下看…… 记起之前在校时,无...
    三月小女子23点前睡觉阅读 281评论 2 3
  • 一条路蜿蜒而来, 一条路蜿蜒而去, 两条路曾经一条, 一条路如今两条! 手牵手一路走来, 背对背东西两路!
    简村小吹阅读 112评论 0 0
  • 昨天去南阳办事,中午吃个饭,想到需要给女儿买个话筒,决定去工贸。在车上接个电话,一不留神,车过了工贸停车场,只有直...
    雪木912阅读 107评论 0 0