MVEL简介及快速使用
MVEL为 MVFLEX Expression Language(MVFLEX表达式语言)的缩写,它是一种动态/静态的可嵌入的表达式语言和为Java平台提供Runtime(运行时)的语言。最初是作为一个应用程序框架实用程序的语言开始,该项目现已发展完全独立。MVEL通常用于执行用户(程序员)通过配置XML文件或注释等定义的基本逻辑。它也可以用来解析简单的JavaBean表达式。Runtime(运行时)允许MVEL表达式通过解释执行或者预编译生成字节码后执行。
MVEL是一个基于java语法的表达式,为JAVA语言提供便捷灵活的动态性。MVEL吸收了大量的java语法,但是作为一个表达式语言,还是与java有很多不同之处,比如MVEL像正则表达式一样,有直接支持集合、数组、字符串的操作符。
除了表达式语言以外,MVEL还提供了用来配置和构造字符串的模板语言。
MVEL表达式主要有以下部分内容:
- 属性表达式
- 布尔表达式
- 方法调用
- 变量赋值
- 函数定义
下面介绍下如何使用MVEL。
示例一、比较相等、获取值和计算
MVEL可以用==判断相等,如foo.name == "Mr.Foo".其中foo可以为上下文对象也可以是外部变量.具体示例代码如下:Person.java
Person.java类
public class Person { private String name; public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
SimpleTester.java类
package org.ndot.mvel.MvelTester.example1; import java.util.HashMap;
import java.util.Map; import org.mvel2.MVEL;
import org.mvel2.compiler.ExecutableAccessor; /** * */
public class SimpleTester { public static void main(String[] args) { Person personInst = new Person(); personInst.setName("Mr.Foo"); // 判断相等 Object objResult = MVEL.eval("name == 'Mr.Foo'", personInst); System.out.println("objResult=" + objResult); // 取值 String strResult = (String) MVEL.eval("name", personInst); System.out.println("strResult=" + strResult); // 计算 Map vars = new HashMap(); vars.put("x", new Integer(5)); vars.put("y", new Integer(10)); // 第一种方式 Integer intResult = (Integer) MVEL.eval("x * y", vars); System.out.println("intResult=" + intResult); // 第二种方式 ExecutableAccessor compiled = (ExecutableAccessor) MVEL.compileExpression("x * y"); intResult = (Integer) MVEL.executeExpression(compiled, vars); System.out.println("intResult=" + intResult); }
}
打印结果:
objResult=true
strResult=Mr.Foo
intResult=50
intResult=50
示例二、MVEL.eval()
public class MVELTest {public static void main(String[] args) {String expression = "foobar > 99";Map vars = new HashMap();vars.put("foobar", new Integer(100));// We know this expression should return a boolean.Boolean result = (Boolean) MVEL.eval(expression, vars);if (result.booleanValue()) {System.out.println("It works!");}}
区别比较:Java 中计算字符串表达式的值
在 Java 中计算字符串数值表达式可以用
javax.script.ScriptEngine#eval(java.lang.String)
,通过调用 JavaScript 来计算
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;public class ExpressionCalculate {public static void main(String[] args) {ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");String expression = "10 * 2 + 6 / (3 - 1)";try {String result = String.valueOf(scriptEngine.eval(expression));System.out.println(result);} catch (ScriptException e) {e.printStackTrace();}}
}
MVEL简介及快速使用相关推荐
- 图数据库HugeGraph简介与快速入门
图数据库HugeGraph简介与快速入门 作者:胡佳辉(家辉),日期:2019年2月10日 CSDN博客:https://blog.csdn.net/gobitan 1. HugeGraph简介 1. ...
- FastAPI简介与快速体验
[原文链接]FastAPI简介与快速体验 文章目录 一.FastAPI简介 二.FastAPI的特点 三.安装 3.1 安装 fastapi 3.2 安装 ASGI 服务器 四.FastAPI快速体验 ...
- USEARCH11命令大全,200+命令中文简介,快速查找需要功能
序列比对 嵌合体检测和过滤 序列.树和基于图形的聚类 距离矩阵 多样性分析 fastq格式文件处理 Fasta和fastq文件处理格式 机器学习和鉴定有用OTUs 其它命令 OTU分析和去噪 OTU表 ...
- MyBatis-Plus之简介、快速入门、insert、update
MyBatis-Plus简介 顾名思义,MyBatis-Plus是一个MyBatis的增强工具,是用来简化JDBC操作的,它可以大量节省我们的工作时间,因为所有的CRUD代码它都可以自动化完成,与My ...
- WEEX框架(一)框架简介和快速上手体验
框架简介 Weex,是能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验的框架,并支持iOS.安卓.Web等多端部署,由阿里巴巴研发和维护. 对于移动开发者来说,W ...
- crow-han(基于go-micro框架的微服务脚手架)-01-快速启动(简介、快速启动、接口测试)
文章目录 1. 简介 1.1 包含内容 1.2 swagger展示 2. 快速启动 2.1 下载 2.2 环境变量配置 2.3 goland配置 2.5 启动 2.6 查看结果 3. swagger ...
- 【mitmproxy】一、简介与快速上手
官方文档 github nodejs 类似框架:anyproxy 一.功能简介 实时拦截.修改 HTTP/HTTPS 请求和响应 可保存完整的 http 会话,方便后续分析和重放 支持反向代理模式将流 ...
- ArcGIS API for JavaScript :简介与快速上手
一.简介 子路曰:"卫君待子而为政,子将奚先?"子曰:"必也正名乎!" 孔子认为,为政最先要做的事情是正名,名不正则言不顺. 语言是上天赋予人类的神奇能力,而& ...
- diamond专题(一)-- 简介和快速使用
大家好,今天开始为大家带来我们通用产品团队的产品 -- diamond的专题,本次为大家介绍diamond的概况和快速使用. 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是 ...
最新文章
- 对指针变量取地址_C语言指针简介(amp;和*运算符)
- egret 开发总结
- 引入了一个IO多路复用模型
- Windows Server Backup 2012设置备份周期
- 翻译:Docker方式安装redmine
- 笨办法学 Python · 续 练习 18:性能测量
- 清除定时器 和 vue 中遇到的定时器setTimeout setInterval问题
- 拓端tecdat|R语言如何在生存分析与Cox回归中计算IDI,NRI指标
- 联想服务器如何进入pe系统,如何制作支持Legacy BIOS和UEFI BIOS两种模式启动的Windows PE...
- selenium万能选择器
- 北京地铁和广州地铁之感想
- tecplot360 2015 R1读abaqus后处理文件
- [初学笔记] pause 语句 的运用,.m文件中按任意键继续程序或者延迟秒数继续程序
- 戴尔计算机无法安装Win10,dell电脑安装win10 识别不了硬盘
- 解决android手机EditText设置光标颜色,android:textCursorDrawable=@drawable/corner_cursor 华为手机无效果的问题
- 【读书笔记】组合计数中的行列式方法
- [C语言]——矩阵的转置
- 音频多声道数据的操作
- bash破壳漏洞分析(一)
- 交易模拟器 android,为Android/Chrome融合打基础? 谷歌收购模拟器团队