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