码迷,mamicode.com
首页 > 编程语言 > 详细

Jexl表达式语言引擎(1)

时间:2019-03-27 21:32:33      阅读:625      评论:0      收藏:0      [点我收藏+]

标签:guice   建表   代码   函数   return   合并   示例   The   调用   

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表达式语言引擎(1)

标签:guice   建表   代码   函数   return   合并   示例   The   调用   

原文地址:https://www.cnblogs.com/Jmmm/p/10610309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!