`
berdy
  • 浏览: 514219 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MVEL 简单介绍

阅读更多
MVEL是一种基于java语法的表达式语言,为java提供更便捷灵活的动态性。

这里简单介绍一些MVEL的操作:

new 创建一个java对象,new String("foo"),当然这里是举个栗子,String的创建一般是不同这个构造函数的。
对于java.lang.*中的类,无需手动导入。如果是创建自定义的对象,就需要写明类全路径名,或者手动导入。

当需要针对同一个对象进行多次操作时,可以是with语句块来高效操作,
with(user = new User()) {
name = 'jacker',age = 18,sex = Sex.FEMALE
}
更便捷是可以使用点号操作
user = new User().{
name="jack";
parent = new User().{
name = "jack\'s parent";
}
}

动态脚本的一个头痛问题就是变量的作用域问题,经常在调试的时候发现一个局部变量覆盖了全局变量导致程序出错。
mvel提供 isdef 来判断某个变量在当前作用域内是否已经定义。defined = isdef var; 或者 if (isdef var) { doSomething();}

MVEL对正则表达式匹配做了简化,只需要通过 ~= 操作符判断即可,if(var ~= '[a-z].+') {doSomething();}

对集合的一些操作也进行了简化,var contains 'test' 判断var集合中是否包含'test'字符串,var可以是一个array,list或者map,
map的话就是判断keyset中是否包含指定的值。var也可以为string,在MVEL中string被认为是一个数组。
支持 in 操作符对list进行遍历,names = (name in users) 上面的操作可以很快的得到 users集合中每个元素的name属性。
同样支持调用集合中元素的方法(静态方法或者实例方法),(sayHello() in users) ,另外可以在子句后面加上if判断对list中
的元素过滤。 $ 用作占位符,($ in users if $.name contains 'jack')

==操作与java中的不用,MVEL中的使用equals()方法判断的。

list 创建
["Jim", "Bob", "Smith"]
map 创建
['Bob' : new Person('Bob'), 'Michael' : new Person('Michael')]
Array 创建
{"Jim", "Bob", "Smith"}
同时支持 lambda 表达式
threshold = def (x) { x >= 10 ? x : 0 }; result = cost + threshold(lowerBound);
更多的详细内容可以参考MVEL Language Guide
http://mvel.codehaus.org/Language+Guide+for+2.0

下面介绍一下例子:
表达式的执行有两种模式
一种是编译模式,就是先编译表达式并缓存,执行的时候传入对应的参数
一种是解析模式,跟其他脚本语言一样,边解析边执行

编译模式
ExpressionCompiler compiler = new ExpressionCompiler("x + y");
CompiledExpression exp = compiler.compile();
Map<String, Object> params = new HashMap<String, Object>();
params.put("x", 10);
params.put("y", 20);
Object result = MVEL.executeExpression(exp, params);
System.out.println(result);

解析模式
Map<String, Object> params = new HashMap<String, Object>();
params.put("x", 10);
params.put("y", 20);
Object result = MVEL.eval("x+y", params);
System.out.println(result);

调用脚本文件中的函数
File scriptFile = new File("src/main/java/com/test/mvel/test.el");
VariableResolverFactory resolverFactory = new MapVariableResolverFactory();
MVEL.evalFile(scriptFile, ParserContext.create(), resolverFactory);
resolverFactory.createVariable("x", 10);
resolverFactory.createVariable("y", 20);
Object result = MVEL.eval("add(x,y);", resolverFactory);
System.out.println(result);

test.el 文件内容
引用

def add(a,b){
a + b;
}

0
1
分享到:
评论

相关推荐

    mvel2.0语法指南.pdf

    一条 MVEL 表达式可以从简单到复杂,既可以是一个单一的标识符,也可以是一个包含多个方法调用和内部集合创建的复合表达式。 **2.1.1 属性表达式** - 示例:`user.name` - 解释:这是一个基本的属性表达式,用于...

    MVEL 2.doc

    下面将详细介绍MVEL 2.0的使用方法、核心概念以及如何与应用程序集成。 ### MVEL表达式基础 MVEL表达式的例子如`foo.name == "Mr. Foo"`,这个表达式检查`foo.name`的值是否等于字符串"Mr. Foo"。这里的`foo`可以...

    mvel-repl:MVEL 的简单复制

    介绍 这是一个用于测试表达式的简单 Repl(Read-Eval-Print-Loop)。 用法 由于这是一个简单的 Maven 项目,因此可以使用 &gt; mvn install 项目配置了Maven exec插件,直接调用即可启动repl &gt; mvn exec:java

    ONGL介绍

    **ONGL(Object-Graph Navigation Language)介绍** ONGL,全称为Object-Graph Navigation Language,是一种强大的表达式语言,主要用于Java应用程序中数据对象的导航、访问和操作。它允许开发者以简洁的方式处理...

    easy-rules-3.3.0jar.zip

    3. `easy-rules-mvel-3.3.0.jar`:这是基于MVEL表达式语言的规则引擎扩展,MVEL是一个简洁且高性能的脚本语言,允许开发者用自然的语法定义规则条件和行动。 在非Maven的Java项目中引入这些JAR包,你需要将它们添加...

    activiti实战及示例源码

    10. **源代码实践**:附带的源代码可以帮助读者更好地理解和应用书中介绍的概念,这些代码涵盖了各种场景,如简单流程、复杂流程、表单集成等,是学习和调试的宝贵资源。 通过阅读《Activiti实战及示例源码》,读者...

    ElasticSearch优化

    1. 模块介绍: ElasticSearch是一个基于Lucene构建的开源搜索引擎,旨在提供实时的搜索功能。它广泛应用于日志数据分析、搜索应用等场景。ElasticSearch通过分布式设计和分片技术,能够对大量数据进行快速的存储和...

    Packt.Drools.Developers.Cookbook.Jan.2012

    1. **规则定义与执行**:介绍如何编写和执行简单的规则,以及如何利用Drools的模式匹配能力。 2. **事件处理**:探讨如何处理和响应实时事件,特别是在高负载和复杂环境中的性能优化策略。 3. **业务流程建模**:...

    activiti5用户手册

    手册深入浅出地介绍了如何利用Activiti来构建和优化业务流程。 一、 Activiti简介 Activiti是一款轻量级、高性能的工作流引擎,它基于BPMN 2.0标准,提供了丰富的API和图形化建模工具,支持复杂的业务流程建模。它...

    Drools学习资料2

    Drools是JBOSS的一个开源项目,基于Java语言,遵循MVEL和Java Expression Language(JEXL)语法,提供了一个高效、灵活且可扩展的规则引擎。它支持规则的编写、管理和执行,使得业务逻辑可以与应用程序代码分离,...

    [Drools]JAVA规则引擎(非常好的一篇教程).doc

    Drools支持多种规则语言,包括传统的DRL(Drools Rule Language)、MVEL以及XML等,能够帮助开发者将复杂的业务规则从业务逻辑代码中分离出来,从而实现更加灵活的管理和维护。 #### 二、Drools的基本工作流程 ...

Global site tag (gtag.js) - Google Analytics