Java规则引擎easy-rules

   日期:2024-12-26    作者:n19v1 移动:http://oml01z.riyuangf.com/mobile/quote/53918.html

首先以通俗的语言表达何为规则引擎
一段代码

 

上述代码中循环了100次,从1开始循环+1.
如果当前数字能被5、7整除。打印:能被5和7同时整除的数字
其余的数字依次打印出来。

其实上面例子中的如果就是我们希望的规则,由此可见当我们业务上遇到较为复杂多样的规则的时候,代码中会出现满篇的if–else。降低代码的易读性、增加代码行数,后期修改规则繁复等等的弊端都体现出来。因此我们用到了规则引擎,也就是今天的主人公——easy-rules

Easy Rules是一个简单但功能强大的Java规则引擎,提供以下特性:

  • 轻量级框架和易于学习的API
  • 基于POJO的开发
  • 支持从原始规则创建组合规则
  • 支持通过表达式(如MVEL,SPEL和JEXL)定义规则

先从一段源码来了解

 

evaluate()方法封装了必须为true才能触发规则的条件。
execute()方法封装了在满足规则条件时应该执行的操作。
条件和操作由Condition和Action接口表示。
总结来说,我们可以通过定义Condition来判断是否执行此规则,通过Action来决定执行什么样的规则。

上面大概讲述了一下rule的基本结构,下面我们来探讨下究竟如何使用

完整的示例需要几个东西要讲一下,大家耐心看完

  • 第一点:Easy Rules提供了注解,可以将POJO转换为规则
 

上面代码中,我们自己通过注解的方式先定义了一个规则,以及规则是否执行的条件,执行的内容。

  • 第二点:上面代码中的注解是什么意思呢

源码

 

实际上是一个事实,name代表了在事实中的命名,value则是实际要传递的参数。

Facts API表示一组事实 所以在同一空间内,fact的name不可重复。

 
  • 第三点:建立规则引擎
 

规则引擎参数
Easy Rules引擎可以配置以下参数:

  • :当优先级超过指定的阈值时,跳过余下的规则。
  • :当一个规则成功应用时,跳过余下的规则。
  • :当一个规则失败时,跳过余下的规则。
  • :当一个规则未触发时,跳过余下的规则。

示例

 
简单了解了以上三点,便可以进行一个简单的程序了

按照我们开篇的例子来说

循环100次,从1开始循环+1.
如果当前数字能被5、7整除。打印:能被5和7同时整除的数字
其余的数字依次打印出来。

把上述规则建立起来 ↓

 
 

使用


 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号