java jexl_一种表达式语言的解析引擎JEXL简单使用
Jexl 是一个 Expression Language 的解析引擎, 是为了方便嵌入你的系统或者程序框架的开发中, 他算是实现了 JSTL 中 EL 的延伸版本. 不过也采用了一些 Velocity 的概念. 下面是一个使用Jexl的例子,有详细注释,
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.jexl.Expression;
import org.apache.commons.jexl.ExpressionFactory;
import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jexl.JexlHelper;
......
/*
* 初始化一个Cat对象
*/
Cat cat = new Cat() {
{
this.setAge(2);
this.setName("Tom");
this.setOwner(new People() {
{
this.setAge(24);
this.setName("yang");
}
});
}
};
/*
* 初始化一个List对象,列表里存入两个元素
* 第一个元素是一个字符串
* 第二个元素是一个整数
*/
List list = new ArrayList();
list.add("Hello world !");
list.add(11);
Map map = new HashMap();
map.put("cat", cat);
map.put("people",cat.getOwner());
/*
* 初始化一个JexlContext对象,它代表一个执行JEXL表达式的上下文环境
*/
JexlContext context = JexlHelper.createContext();
/*
* 向执行JEXL表达式的上下文环境的变量字典中存入两个变量
* 键值 "tom" 对应变量 cat
* 键值 "array" 对应变量 list
*/
context.getVars().put("tom", cat);
context.getVars().put("array", list);
context.getVars().put("map", map);
/*
* 定义要被求值的所有表达式
*/
String[] expressions = new String[]{
//嵌套属性
"tom.owner",
//嵌套属性
"tom.owner.name",
//嵌套属性的方法调用,表达式求值结果为方法返回值
"tom.owner.name.length()",
"array[0].toUpperCase()",
//内置通用方法size(),返回String,Map和List的长度
"size(tom.owner.name)",
//返回列表中第一个元素
"array[0]",
//+ 操作符 可用于字符串的连接
"array[0].toUpperCase()+array[0]",
//内置通用方法empty(),如果为空返回true,否则返回false
"empty(array[0])",
"empty(array[2])",
//通过键值 'cat' 获取字典中相应的值
"map['cat']",
//嵌套属性
"map['people'].name.length()"
};
//对 expressions 中所有的表达式求值
for(String expression : expressions){
//用ExpressionFactory类的静态方法createExpression创建一个Expression对象
Expression e = ExpressionFactory.createExpression(expression);
//对这个Expression对象求值,传入执行JEXL表达式的上下文环境对象
Object obj = e.evaluate(context);
//输出表达式求值结果
System.out.println(e.getExpression()+" = "+obj);
}
运行结果如下:
tom.owner = testJexl.Test_1$1$1@1ffbd68
tom.owner.name = yang
tom.owner.name.length() = 4
array[0].toUpperCase() = HELLO WORLD !
size(tom.owner.name) = 4
array[0] = Hello world !
array[0].toUpperCase()+array[0] = HELLO WORLD !Hello world !
empty(array[0]) = false
empty(array[2]) = true
map['cat'] = testJexl.Test_1$1@179c285
map['people'].name.length() = 4
---------------------
作者:Towan
来源:CSDN
原文:https://blog.csdn.net/htw2012/article/details/17715587
版权声明:本文为博主原创文章,转载请附上博文链接!
java jexl_一种表达式语言的解析引擎JEXL简单使用相关推荐
- 昨晚看《天才知道》3进2的一个java基础题目有感:java是一种跨平台语言,它组成的2个部分是什么
昨晚无意中看天才知道发现了这么个题目大概是这样: java是一种跨平台语言,它组成的2个部分是什么? 思考了一下,又看一次基础: java语言是一种基于"面向对象"思想的程序设计语 ...
- Java是一种什么语言
作者:王奎 我的博客:www.marksaas.com Java是一种计算机编程语言,拥有跨平台.面向对象.泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发. Java编程语言 ...
- Java是一种强类型语言
强类型:在使用变量的时候,需要显示的定义变量的数据类型 java 弱类型:在使用变量的时候,不需要定义变量的数据类型,程序会根据值自己判断数据类型 js,python,scala 数据类型: 基 ...
- 在JSP2.0中使用EL表达式语言
EL(表达式语言)是一种数据访问语言,可以方便地访问和处理应用程序数据,而无需使用scriptlet或者请求时(request-time)表达式的值.(不需要使用< % 和%>来获得数据, ...
- JAVA中几种常用JSON库性能比较
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...
- Spring3的表达式语言
Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts2x中使用的OGNL表达式语言, 能 ...
- java中8种基本类型与运算符
java是一种强类型语言,类型一旦出错就编译不过去,在这里java一共有 1)整形:int(4字节)short(2字节)long(8字节) 2)浮点型:float(4字节)double(8字节) 3) ...
- Spring表达式语言使用
Spring表达式语言使用 @(Spring)[spEL, Spring, 表达式语言] Spring表达式语言使用 基本概述 spEL的功能概述 spEL语法以XML为例 字面值表达式 字符串 整型 ...
- 开涛spring3(5.15.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础
5.1 概述 5.1.1 概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts ...
最新文章
- [微信小程序]滚动选择器
- 数据分析索引总结(下)Pandas索引技巧
- Gaussian Filter
- c语言编译器bug,关于c语言的一个小bug详解
- 快递物流查询接口介绍
- JavaScript专题之从零实现jQuery的extend
- “面试不败计划”:集合知识整体总结
- 济南长清区谋定特色展销中心 对话中国农民丰收节交易会
- 黑马程序员--网络编程
- 【测试能力提升】Jira 和禅道数据库分析,方便你写周报、写总结、出报告
- 逻辑分析题目:“给你一个9升的水桶和一个4升的水桶,在河里取6升水”
- 轻松访问Google Chrome浏览器中的浏览历史记录
- ABP-Hangfire定时任务
- 程序实例python_Python花式编程案例集锦(5)
- 我脸上被软件开发刻了几个字
- 国内云计算的下半场机遇在哪里?
- 联合循环——07(集控楼系统)
- 软件设计师-5.软件工程基础知识
- 我的2012--研究生的毕业季
- DeepAR多重多元多步时间序列预测
热门文章
- 更新cocoapods相关问题
- git commit --amend用法(摘抄)
- 基于JAVA的IKAnalyzer中文分词运用
- [刘阳Java]_CSS数字分页效果
- Java获取Object属性值
- MVC中某个页面不需要引用母版页的正确写法
- [WP8] ListBox的Item宽度自动填满
- 离散卷积与自相关----------信号处理系列[原创]
- upupoo设置HTML壁纸,win10 upupoo黑屏怎么解决-解决upupoo设置壁纸黑屏的方法 - 河东软件园...
- Python框架篇之Django(Django项目搭建全过程、Web框架与Django)