分享好友 最新动态首页 最新动态分类 切换频道
Java规则引擎深度解析:Drools、Aviator与EasyRules
2024-12-26 23:42

Java各种规则引擎 - 简书

Java规则引擎深度解析:Drools、Aviator与EasyRules

一. Drools规则引擎

  1. 简介

 
  1. 特性

 

3.原理

 

  1. 使用方式

(1)Maven 依赖

 

(2)新建配置文件/src/resources/META-INF/kmodule.xml

 

(3)新建drools规则文件/src/resources/rules/age.drl

 

工程搭建完毕,效果如图

 

测试用例

 

二.Aviator表达式求值引擎

  1. 简介

 
  1. 特性

 
  1. 整体结构

     

     

  2. maven依赖

 
  1. 执行方式
    执行表达式的方法有两个:execute()、exec();
    execute(),需要传递Map格式参数
    exec(),不需要传递Map
    示例

 
  1. 使用函数
    Aviator可以使用两种函数:内置函数、自定义函数
    (1)内置函数

     

     

Aviator内置函数.png

 

(2)自定义函数

自定义函数要继承AbstractFunction类,重写目标方法。

 
  1. 常用操作符的使用
    (1)操作符列表

     

    操作符列表.png

(2)常量和变量

 

常量和变量.png

(3)编译表达式

 

(4) 访问数组和集合
List和数组用list[0]和array[0],Map用map.date

 

(5) 三元比较符

 

(6) 正则表达式匹配

 

(7) 变量的语法糖衣

 

(8) nil对象[任何对象都比nil大除了nil本身]

 

(9) 日期比较

 

(10) 语法手册

数据类型

  • Number类型:数字类型,支持两种类型,分别对应Java的Long和Double,也就是说任何整数都将被转换为Long,而任何浮点数都将被转换为Double,包括用户传入的数值也是如此转换。不支持科学计数法,仅支持十进制。如-1、100、2.3等。

  • String类型: 字符串类型,单引号或者双引号括起来的文本串,如'hello world',变量如果传入的是String或者Character也将转为String类型。

  • Bool类型: 常量true和false,表示真值和假值,与java的Boolean.TRUE和Boolean.False对应。

  • Pattern类型: 类似Ruby、perl的正则表达式,以//括起来的字符串,如//d+/,内部实现为java.util.Pattern。

  • 变量类型: 与Java的变量命名规则相同,变量的值由用户传入,如"a"、"b"等

  • nil类型: 常量nil,类似java中的null,但是nil比较特殊,nil不仅可以参与==、!=的比较,也可以参与>、>=、<、<=的比较,Aviator规定任何类型都n大于nil除了nil本身,nil==nil返回true。用户传入的变量值如果为null,那么也将作为nil处理,nil打印为null。

算术运算符

Aviator支持常见的算术运算符,包括+ - <tt></tt> / % 五个二元运算符,和一元运算符"-"。其中 - <tt></tt> / %和一元的"-"仅能作用于Number类型。

"+"不仅能用于Number类型,还可以用于String的相加,或者字符串与其他对象的相加。Aviator规定,任何类型与String相加,结果为String。

逻辑运算符

Avaitor的支持的逻辑运算符包括,一元否定运算符"!",以及逻辑与的"&&",逻辑或的"||"。逻辑运算符的操作数只能为Boolean。

关系运算符

Aviator支持的关系运算符包括"<" "<=" ">" ">=" 以及"=="和"!=" 。
&&和||都执行短路规则。

关系运算符可以作用于Number之间、String之间、Pattern之间、Boolean之间、变量之间以及其他类型与nil之间的关系比较,不同类型除了nil之外不能相互比较。

Aviator规定任何对象都比nil大除了nil之外。

匹配运算符

匹配运算符"=~"用于String和Pattern的匹配,它的左操作数必须为String,右操作数必须为Pattern。匹配成功后,Pattern的分组将存于变量$num,num为分组索引。

三元运算符

Aviator没有提供if else语句,但是提供了三元运算符 "?:",形式为 bool ? exp1: exp2。 其中bool必须为结果为Boolean类型的表达式,而exp1和exp2可以为任何合法的Aviator表达式,并且不要求exp1和exp2返回的结果类型一致。

  1. 两种模式
    默认AviatorEvaluator以编译速度优先
    AviatorEvaluator.setOptimize(AviatorEvaluator.COMPILE);
    你可以修改为运行速度优先,这会做更多的编译优化
    AviatorEvaluator.setOptimize(AviatorEvaluator.EVAL);

三.MVEL表达式解析器

1.简介

 

2.特性

 

3.原理

 

4.使用方式
maven引入jar

 

测试

 

四.EasyRules规则引擎

1.简介

 

2.特性

 

3.使用方式

 

有两种使用方式

  1. java方式
    首先先创建规则并标注属性

 

然后客户端调用

 

2.yml方式

resources目录下新建fizzbuzz.yml

 

客户端调用


最新文章
链家网页爬虫_爬虫篇 | Python 6个维度,数万条数据帮你揭秘房租大涨
本文转载于公众号:恋习Python原文地址:https://mp.weixin.qq.com/s/vvZ2yBb2eMKP800LUPoAWg最近休息了一段时间,现在开启更新模式! 8月初,有网友在“水木论坛”发帖控诉长租公寓加价抢房引起关注。据说,
wordpress外贸建站 wordpress woocommerce 建站
使用Siteground 主机搭建Wordpress外贸网站的第一步就是选择一个域名,不管你是否已经有了域名或者网站,或者还没有购买过域名,本教程都会带你了解在Siteground上建站域名如何设置。成都创新互联服务项目包括临川网站建设、临川网站制作、
拆解小红书竞品关键词,掌握品牌投放策略
离不开种草笔记的投放,而笔记铺设的关键词,会影响推广产品的曝光度。通过关键词对比,了解自家品牌关键词的互动效果,以及调研竞品的关键词布局,笔记互动趋势,可帮助品牌优化内容布局和投放策略。关键词在小红书运营中扮演着重要的角色
黑神话悟空未获TGA年度游戏,仍获最佳动作游戏
来源:@消费者报道微博#TGA号称游戏界奥斯卡#【黑神话悟空未获TGA年度游戏,仍获最佳动作游戏】#黑神话悟空流水有望超百亿#北京时间12月13日上午,在2024游戏大选(The Game Awards,以下简称“TGA”)颁奖典礼,《宇宙(ASTRO BOT)》获TG
专家访谈汇总:有哪些量子科技概念股?
1、 《量子科技第一龙头,与华为合作,有望大涨》摘要 谷歌发布的量子计算芯片“Willow”标志着量子技术迈入关键里程碑,其通过指数级减少量子比特的错误率,在药物发现、聚变能和电池设计等领域具有巨大潜力。在一次基准测试中,Willow仅
安卓玩游戏哪款效果好 高通骁龙芯首选
安卓玩游戏哪款效果好高通骁龙芯首选前言:相信大家一定有非常多的朋友喜欢用玩游戏,笔者也一样,最喜欢用手机玩各种大型游戏,比如什么《NBA2K17》、《》、《近地轨道联盟》等等,相信有的朋友是非常熟悉Gameloft游戏的,他们家游戏画面
超逼真美女写真生成:AI工具的全新体验与实用指南
Midjourney:Midjourney以其独特的艺术风格和高质量的图像生成而闻名。用户只需提供一些关键词和描述,系统便能够生成符合用户需求的美女照片。这款工具的优点在于其生成的作品极具艺术感,适合追求时尚潮流的用户。然而,Midjourney的使用
抖音搜索用户排名的规则是什么(解析抖音搜索有什么用)
现如今大部分的人都会利用空闲时间来刷抖音,由此可见平台的流量是非常之大的,不少商家都会抖音来推广产品,搜索越多流量就会越大,下面我们来说说抖音搜索用户排名的规则是什么?1、布局关键词搜索的重点就是关键词的布局,布局的关键词越
淘宝属性是什么意思
淘宝属性是指商品在淘宝平台上的详细特征和描述,这些属性帮助买家更好地了解商品,从而做出购买决策。淘宝属性包括基础属性、销售属性、自定义属性等多个方面。下面我们将分步骤详细介绍淘宝属性的含义和设置方法。一、基础属性基础属性是
必看教程“微乐卡五星开挂下载安装”其实确实有挂
您好:微乐卡五星开挂下载安装这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,
相关文章
推荐文章
发表评论
0评