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简介及快速使用相关推荐

  1. 图数据库HugeGraph简介与快速入门

    图数据库HugeGraph简介与快速入门 作者:胡佳辉(家辉),日期:2019年2月10日 CSDN博客:https://blog.csdn.net/gobitan 1. HugeGraph简介 1. ...

  2. FastAPI简介与快速体验

    [原文链接]FastAPI简介与快速体验 文章目录 一.FastAPI简介 二.FastAPI的特点 三.安装 3.1 安装 fastapi 3.2 安装 ASGI 服务器 四.FastAPI快速体验 ...

  3. USEARCH11命令大全,200+命令中文简介,快速查找需要功能

    序列比对 嵌合体检测和过滤 序列.树和基于图形的聚类 距离矩阵 多样性分析 fastq格式文件处理 Fasta和fastq文件处理格式 机器学习和鉴定有用OTUs 其它命令 OTU分析和去噪 OTU表 ...

  4. MyBatis-Plus之简介、快速入门、insert、update

    MyBatis-Plus简介 顾名思义,MyBatis-Plus是一个MyBatis的增强工具,是用来简化JDBC操作的,它可以大量节省我们的工作时间,因为所有的CRUD代码它都可以自动化完成,与My ...

  5. WEEX框架(一)框架简介和快速上手体验

    框架简介 Weex,是能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验的框架,并支持iOS.安卓.Web等多端部署,由阿里巴巴研发和维护. 对于移动开发者来说,W ...

  6. 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 ...

  7. 【mitmproxy】一、简介与快速上手

    官方文档 github nodejs 类似框架:anyproxy 一.功能简介 实时拦截.修改 HTTP/HTTPS 请求和响应 可保存完整的 http 会话,方便后续分析和重放 支持反向代理模式将流 ...

  8. ArcGIS API for JavaScript :简介与快速上手

    一.简介 子路曰:"卫君待子而为政,子将奚先?"子曰:"必也正名乎!" 孔子认为,为政最先要做的事情是正名,名不正则言不顺. 语言是上天赋予人类的神奇能力,而& ...

  9. diamond专题(一)-- 简介和快速使用

    大家好,今天开始为大家带来我们通用产品团队的产品 -- diamond的专题,本次为大家介绍diamond的概况和快速使用. 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是 ...

最新文章

  1. 对指针变量取地址_C语言指针简介(amp;和*运算符)
  2. egret 开发总结
  3. 引入了一个IO多路复用模型
  4. Windows Server Backup 2012设置备份周期
  5. 翻译:Docker方式安装redmine
  6. 笨办法学 Python · 续 练习 18:性能测量
  7. 清除定时器 和 vue 中遇到的定时器setTimeout setInterval问题
  8. 拓端tecdat|R语言如何在生存分析与Cox回归中计算IDI,NRI指标
  9. 联想服务器如何进入pe系统,如何制作支持Legacy BIOS和UEFI BIOS两种模式启动的Windows PE...
  10. selenium万能选择器
  11. 北京地铁和广州地铁之感想
  12. tecplot360 2015 R1读abaqus后处理文件
  13. [初学笔记] pause 语句 的运用,.m文件中按任意键继续程序或者延迟秒数继续程序
  14. 戴尔计算机无法安装Win10,dell电脑安装win10 识别不了硬盘
  15. 解决android手机EditText设置光标颜色,android:textCursorDrawable=@drawable/corner_cursor 华为手机无效果的问题
  16. 【读书笔记】组合计数中的行列式方法
  17. [C语言]——矩阵的转置
  18. 音频多声道数据的操作
  19. bash破壳漏洞分析(一)
  20. 交易模拟器 android,为Android/Chrome融合打基础? 谷歌收购模拟器团队

热门文章

  1. CD5X开启Kerberos认证
  2. kangle配置cdn_缓存 Kangle部署多节点CDN _好机友
  3. 实现layui的树形表格treeTable
  4. 2023年大厂秋季校招整理
  5. 双目相机测距代码演示
  6. C语言的排序方法(选择排序和利用C语言的库存排序)
  7. figma 安装插件_figma插件教程6 6
  8. 流形学习(Manifold Learning)简单介绍
  9. 第六次实验:使用朴素贝叶斯对垃圾邮件分类(CUST)
  10. Python 利用xlrd读取Excel文件