java - Drools:mvel 和 java 方言之间的差异

标签 java drools mvel

作为 Drools 的新手,我对 mvel 和 java 方言之间的差异以及使用它们的相对优缺点感到困惑。

经过一些初步研究,我遇到了一些讨论 here , 和 here .

除语法糖外,与 java 相比,使用 mvel 还有哪些其他区别?

谢谢。

最佳答案

MVEL 是 Apache 许可的强大表达式语言 (EL),用 Java 编写用于基于 Java 的应用程序,因此其语法与 Java 基本相似。

  • MVEL 表达式简洁,语法易于理解。
  • Apache drools 使用 MVEL 模板进行动态代码生成。
  • MVEL 引擎性能优于其他 EL 引擎。

考虑一个例子。

    rule "validate holiday" 
    dialect "mvel"
    dialect "java"
    when
        $h1 : Holiday( month == "july" )
    then
        System.out.println($h1.name + ":" + $h1.month);
    end

方言“mvel”的目的是指向普通旧 Java 对象 (POJO) 类变量的 Getter 和 Setters。考虑上面的示例,其中使用了 Holiday 类并在圆括号(圆括号)内使用了“月”。因此,在方言“mvel”的帮助下,可以访问变量“month”的 getter 和 setter。

方言“java”用于帮助我们在规则中编写 Java 代码。对此有一个限制或特征。我们不能在规则的“when”部分使用 Java 代码,但可以在“then”部分使用 Java 代码。

我们也可以声明一个没有 $ 符号的引用变量 $h1。对此没有限制。在变量前加上$符号的主要目的是标记POJO类变量和Rules变量的区别。

关于java - Drools:mvel 和 java 方言之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28473204/

相关文章:

java - 将多重递归方法转化为迭代

drools - Drools 7.57.0.Final 中的模式匹配问题

java - 截取MVEL表达式中每个函数的输入和输出

elasticsearch - 嵌套的Mvel脚本更新

java - 未能在项目 hapi-fhir-jpaserver-starter 上执行目标 org.apache.maven.plugins :maven-war-plugin:3. 2.3:war (default-war)

java - 从对象调用方法时出现空指针异常

java - 将 zip 文件导入为库 - Eclipse Java

java - 是否可以动态运行 Drools 规则?

java - 无法构建新的 drools 规则,错误 : Rule Compilation error : ! !!超出 65535 字节限制

elasticsearch - 在 Elasticsearch 查询中使用脚本时,根据它们的长度过滤构面术语