Jexl表达式语言引擎

Posted jmmm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jexl表达式语言引擎相关的知识,希望对你有一定的参考价值。

JEXL是一个库,旨在促进在用Java编写的应用程序和框架中实现动态和脚本功能。
该库提供了一个占用空间小的API - 核心功能适合3个类和10个方法 - 可以在各种条件下使用:

  • 脚本功能:
    • 您的应用程序允许(高级)用户评估或定义一些简单的表达式,如计算公式。
  • 模块或组件配置:
    • 您的应用程序具有最终用户模块使用的配置文件(最终由设计模块生成),这些文件将受益于变量和表达式。
    • 如果使用IOC会很方便,但整体复杂性不需要(或不能依赖)一个完整的库(Spring,Guice ......)。
  • 接口和实现的松散耦合或duck-typing:
    • 您有可选的类,您的代码不能将其视为编译依赖项。
    • 您必须集成并调用“遗留”代码或使用您不希望强烈依赖的组件。
  • 简单的模板功能:
    • 您的应用程序具有基本模板要求,而JSP或Velocity可能会过度或过于不便于部署。

Example:

计算表达式时,JEXL合并的 JexlExpression 或 JexlScript 与 JexlContext。使用JexlEngine #createExpression()创建表达式 ,传递包含有效JEXL语法的String。可以通过实例化MapContext来创建简单的 JexlContext ; 可以通过其构造函数选择提供内部包装的变量映射。以下示例采用名为foo的变量,并在属性innerFoo上调用bar()方法:

public class Example {

    public static void main(String[] args) {
        // Create or retrieve an engine
        JexlEngine jexl = new JexlBuilder().create();

        // Create an expression
        String jexlExp = "foo.innerFoo.bar()";
        JexlExpression e = jexl.createExpression( jexlExp );

        // Create a context and add data
        JexlContext jc = new MapContext();
        jc.set("foo", new Foo() );

        // Now evaluate the expression, getting the result
        Object o = e.evaluate(jc);
    }
}

public class Foo {

    public Foo getInnerFoo(){
        return new Foo();
    }

    public String bar(){
        return "bar";
    }
}

Apache Maven:

    <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-jexl3</artifactId>
            <version>3.1</version>
   </dependency>

以上是关于Jexl表达式语言引擎的主要内容,如果未能解决你的问题,请参考以下文章

Jexl 字符串转表达式

Jexl 字符串转表达式

php初步

Spring注释创建一个jexl2.Expression

xml JEXL与Scriptella循环

不到40行代码构建正则表达式引擎