jexl

作者: 彼来风弦 | 来源:发表于2018-08-07 20:49 被阅读0次

    一、名词解释

    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);

    }

    }

    相关文章

      网友评论

          本文标题:jexl

          本文链接:https://www.haomeiwen.com/subject/zrqzvftx.html