Java规则引擎有什么优点

技术Java规则引擎有什么优点本篇内容主要讲解“Java规则引擎有什么优点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java规则引擎有什么优点”吧!一、概述1 规则引擎概

本文主要讲解“Java规则引擎有哪些优势”,感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“Java规则引擎有什么优势”!

00-101010

一、概述

规则引擎是根据规则中包含的指定过滤条件,判断是否能够匹配运行时的实时条件来执行规则中指定的动作的引擎。

规则引擎由推理机发展而来,是嵌入在应用程序中的组件,可以将业务决策从应用程序代码中分离出来,并使用预定义的语义模块来编写业务决策。

规则的具体执行可以分为三个过程:接受数据输入、解释业务规则和做出业务决策。

00-1010声明式编程。规则引擎允许你描述做什么而不是怎么做。规则比代码更容易阅读。

逻辑和数据的分离。数据存储在系统对象中,逻辑存储在规则中。它打破了面向对象系统中数据与逻辑耦合的局面。因为逻辑存储在规则中,所以将来逻辑发生变化时更容易维护。通过将逻辑集中在一个或几个清晰的规则文件中,之前分散在代码中的情况被取代了。

以及速度的可测量性。Rete算法、Leaps算法以及由此衍生的Drools的Rete和Leaps算法为系统数据对象提供了非常高效的匹配。这些算法已经被大量的实际测试所证明。

知识集中化。通过使用规则,将建立一个可执行的规则库。这意味着规则库代表了现实中业务策略的唯一对应关系,理想情况下,可读性高的规则也可以作为文档使用。

解释机制。通过记录规则引擎的决策以及决策的原因,规则系统提供了一个很好的“解释机制”。

可以理解的规则。通过建立对象模型和DSL(领域定义语言),可以用接近自然语言的方式编写规则。这使得非技术人员和领域专家能够用自己的逻辑理解规则(因为程序的复杂性已经被隐藏了)。

1 规则引擎概念

与业务系统相比,规则引擎可以看作是一个独立于业务系统的模块,负责一些规则的计算等等。一般来说,规则引擎主要用于以下场景:

风险控制模型的配置和风险控制规则的设置。

用户积分等配置,如日常操作积分变化等。

简单的离线计算,数据量小的统计等。

注意:规则引擎作为一个独立的模块,有其自身的庞大性和复杂性,并不是所有相关的业务系统都需要引入规则引擎。

必须建立一些数据模型。

考虑冲突、优先事项等。规则。

控制规则的复杂度,以免给规则配置器增加太多的学习成本。

因此,规则引擎不太适合一些时间周期短、规则复杂、变更不频繁的项目。

00-1010一般来说,Java规则引擎由以下几个部分组成:Working Memory,即工作空间,用于存储引擎引用的数据对象的集合;用于存储激活的规则执行实例的规则执行队列;静态规则区用于存储所有加载的业务规则,这些规则将按照一定的数据结构进行组织。当工作空间中的数据发生变化时,引擎需要根据工作空间中对象的状态快速调整规则执行队列中的规则执行实例。Java规则引擎的结构图如图1所示。

Java规则引擎有什么优点

图1规则引擎执行结构图

引擎执行时,会按照规则执行队列中的优先级顺序,逐一执行规则执行实例。因为规则的执行部分可能会改变工作区中的数据对象,所以队列中的一些规则执行实例会因为条件的改变而失效,必须从队列中撤销。它还可以激活不符合条件的原始规则,并生成新的规则执行实例来进入队列。于是产生了“动态”的规则执行链,形成了规则推理机制。这个规则的“连锁”反应完全是由工作空间中的数据驱动的。

00-1010以下的项目都是开源的,超链接中有github链接,有更详细的使用示例。表1显示了综合比较结果。

表1规则引擎的综合比较

class="firstRow">

 

适用场景

优点

缺点

活跃性

综合评估

 

Drools

决业务代码和业务规则分离;适用于大型应用系统

性能高

可整合

可维护

学习成本高

文档

持续更新

流行

 

五星

 

MVEL

使用表达式语言定义规则

灵活,性能高,无类型限制

资料少

Github更新少

三星

Easy Rules

使用表达式语言定义规则

易学,基于POJO,支持复合规则,方式多样

Github维护者少

最新版本今年4月发布

四星

Aviator

各种表达式的动态求值

高性能;轻量级;支持多种类型

Github维护者少

资料齐,例子多

四星

3.1 Drools

    Drools是专注于解决业务代码和业务规则分离的引擎。Drools 规则是在 Java 应用程序上运行的,其要执行的步骤顺序由代码确定,Drools 规则引擎将业务规则转换成执行树。具体结构见图2。

Java规则引擎有什么优点

图2 Drools流程图

    优点:非常活跃的社区支持;易用;快速的执行速度;在 Java 开发人员中流行;与 Java Rule Engine API(JSR 94)兼容。

3.2 MVEL

    MVEL是一个功能强大的基于Java应用程序的表达式语言。作为一个表达式语言,旨在更高的效率,例如:直接支持集合、数组和字符串匹配等操作以及正则表达式。 MVEL用于执行使用Java语法编写的表达式。

    与Java不同,MVEL是动态类型(带有可选分类),也就是说在源文件中是没有类型限制的。一条MVEL表达式,简单的可以是单个标识符,复杂的则可能是一个充满了方法调用和内部集合创建的庞大的布尔表达式。

    目前最新的版本是2.0,具有以下特性:

  (1)动态JIT优化器。当负载超过一个确保代码产生的阈值时,选择性地产生字节代码,这大大减少了内存的使用量。新的静态类型检查和属性支持,允许集成类型安全表达;

    (2) 错误报告改善,包括行和列的错误信息;

    (3) 新的脚本语言特征。MVEL2.0 包含函数定义,如:闭包,lambda定义,标准循环构造(for, while, do-while, do-until…)。;

    (4) 改进的集成功能。迎合主流的需求,MVEL2.0支持基础类型的个性化属性处理器,集成到JIT中;

    (5) 集成不良,字节码生成编译时间慢,还增加了可扩展性问题;不用字节码生成运行时执行非常慢。

3.3 Easy Rules

    Easy Rules 是一款 Java 规则引擎,easy-rules首先集成了mvel表达式,后续可能集成SpEL的一款轻量级规则引擎,Easy Rules 提供了规则抽象来创建带有条件和操作的规则,以及运行一组规则来评估条件和执行操作的RulesEngine API。

    easy rules有以下特性:轻量级框架;学习成本低;基于POJO;为定义业务引擎提供有用的抽象和简便的应用;从原始的规则组合成复杂的规则。它主要包括几个主要的类或接口:Rule,RulesEngine,RuleListener,Facts ,以及几个主要的注解:@Action,@Condition,@Fact,@Priority,@Rule

3.4 Aviator

    Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。Aviator的设计目标是轻量级和高性能 ,相比于Groovy、JRuby的笨重,Aviator非常小。

    但是Aviator的语法受到限制,它不是一门完整的语言,而只是语言的一小部分集合。其次,Aviator的实现思路与其他轻量级的求值器很不相同,其他求值器一般都是通过解释的方式运行,而Aviator则是直接将表达式编译成Java字节码,交给JVM去执行。其主要特点如下:

(1)支持大部分运算操作符,包括算术操作符、关系运算符、逻辑操作符、正则匹配操作符(=~)、三元表达式?: ,并且支持操作符的优先级和括号强制优先级,具体请看后面的操作符列表;

(2)支持函数调用和自定义函数;

(3)支持正则表达式匹配,类似Ruby、Perl的匹配语法,并且支持类Ruby的$digit指向匹配分组。自动类型转换,当执行操作的时候,会自动判断操作数类型并做相应转换,无法转换即抛异常;

(4)支持传入变量,支持类似a.b.c的嵌套变量访问;

(5)性能优秀;

(6)Aviator的限制,没有if else、do while等语句,没有赋值语句,仅支持逻辑表达式、算术表达式、三元表达式和正则匹配,没有位运算符。

到此,相信大家对“Java规则引擎有什么优点”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/93205.html

(0)

相关推荐

  • php怎么看访问端是移动端还是pc端(php怎么判断是pc还是手机端)

    技术php如何检查是不是微信端这篇文章主要讲解了“php如何检查是不是微信端”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何检查是不是微信端”吧!php检查是不是

    攻略 2021年12月15日
  • JS 创建元素的三种方法

    技术JS 创建元素的三种方法 JS 创建元素的三种方法1、动态创建元素一 document.write()例如向页面中输出一个 li 标签pre class="html" name="code"span

    礼包 2021年11月14日
  • JVM中怎么解析JVM分代垃圾回收策略

    技术JVM中怎么解析JVM分代垃圾回收策略这篇文章将为大家详细讲解有关JVM中怎么解析JVM分代垃圾回收策略,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。由于不同对象的生

    攻略 2021年10月23日
  • 关于计算机中使用补码运算

    技术关于计算机中使用补码运算 关于计算机中使用补码运算1. 原码、反码、补码简单介绍原码、反码、补码都是含有一个符号位的、对带符号数的二进制表示,对应于同一个真值。
    原码带符号位直接读出来就是真值。

    礼包 2021年12月6日
  • C++怎么将帮助函数和它们支持的类放在同一命名空间

    技术C++怎么将帮助函数和它们支持的类放在同一命名空间这篇文章主要讲解了“C++怎么将帮助函数和它们支持的类放在同一命名空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“

    攻略 2021年11月25日
  • 春笋怎么保存,什么方法保存竹笋时间最长

    技术春笋怎么保存,什么方法保存竹笋时间最长1. 要保存好竹笋,要先了解一点竹笋老化方面的知识春笋怎么保存。竹笋在强光和高温下新陈代谢很旺盛,竹笋会出现纤维老化。此外,竹笋被采挖出来后,由于没有根部供水了,加上断口失水和竹

    生活 2021年10月24日