Jexl表达式引擎(1)

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>

转载于:https://www.cnblogs.com/Jmmm/p/10610309.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值