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表达式语言引擎的主要内容,如果未能解决你的问题,请参考以下文章