网站首页 > java教程 正文
1. Easy Rules 概述
1.1 基本概念
Easy Rules是一个Java规则引擎,灵感来自一篇名为《Should I use a Rules Engine?》的文章
规则引擎就是提供一种可选的计算模型。与通常的命令式模型(由带有条件和循环的命令依次组成)不同,规则引擎基于生产规则系统。这是一组生产规则,每条规则都有一个条件(condition)和一个动作(action)———— 简单地说,可以将其看作是一组if-then语句。
了解规则引擎,我们先了解几个概念,如图所示:
我们看到
- 1)facts表示当前被传入的key:value结构的参数
- 2)rule就是一整个规则
- 3)Condition就是rule的判断条件
- 4)action就是满足Condition以后需要触发的动作
那么整个逻辑就是,当一个facts参数对象传入的时候,遍历rules各个规则,每个规则进行规则的条件判断,如果满足条件,那么就触发执行相应的业务逻辑。精妙之处在于规则可以按任何顺序编写,引擎会决定何时使用对顺序有意义的任何方式来计算它们。
1.2 定义规则的多种方式
方式一:注解
@Rule(name = "weather rule", description = "if it rains then take an umbrella")
public class WeatherRule {
@Condition
public boolean itRains(@Fact("rain") boolean rain) {
return rain;
}
@Action
public void takeAnUmbrella() {
System.out.println("It rains, take an umbrella!");
}
}
方式二:链式编程
Rule weatherRule = new RuleBuilder()
.name("weather rule")
.description("if it rains then take an umbrella")
.when(facts -> facts.get("rain").equals(true))
.then(facts -> System.out.println("It rains, take an umbrella!"))
.build();
方式三:表达式
Rule weatherRule = new MVELRule()
.name("weather rule")
.description("if it rains then take an umbrella")
.when("rain == true")
.then("System.out.println(\"It rains, take an umbrella!\");");
方式四:yml配置文件
例如:weather-rule.yml
name: "weather rule"
description: "if it rains then take an umbrella"
condition: "rain == true"
actions:
- "System.out.println(\"It rains, take an umbrella!\");"
1.3 可以通过RuleListener API来监听规则执行事件
public interface RuleListener {
/**
* 在评估规则之前触发。
*
* @param rule 正在被评估的规则
* @param facts 评估规则之前的已知事实
* @return 如果规则应该评估,则返回true,否则返回false
*/
default boolean beforeEvaluate(Rule rule, Facts facts) {
return true;
}
/**
* 在评估规则之后触发
*
* @param rule 评估之后的规则
* @param facts 评估规则之后的已知事实
* @param evaluationResult 评估结果
*/
default void afterEvaluate(Rule rule, Facts facts, boolean evaluationResult) { }
/**
* 运行时异常导致条件评估错误时触发
*
* @param rule 评估之后的规则
* @param facts 评估时的已知事实
* @param exception 条件评估时发生的异常
*/
default void onEvaluationError(Rule rule, Facts facts, Exception exception) { }
/**
* 在规则操作执行之前触发。
*
* @param rule 当前的规则
* @param facts 执行规则操作时的已知事实
*/
default void beforeExecute(Rule rule, Facts facts) { }
/**
* 在规则操作成功执行之后触发
*
* @param rule t当前的规则
* @param facts 执行规则操作时的已知事实
*/
default void onSuccess(Rule rule, Facts facts) { }
/**
* 在规则操作执行失败时触发
*
* @param rule 当前的规则
* @param facts 执行规则操作时的已知事实
* @param exception 执行规则操作时发生的异常
*/
default void onFailure(Rule rule, Facts facts, Exception exception) { }
}
注册监听器到执行引擎上
DefaultRulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.registerRuleListener(myRuleListener);
2.示例
在你的javaweb工程的pom.xml中添加以下依赖
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-support</artifactId>
<version>4.1.0</version>
</dependency>
2.1 示例1-判断奇偶数
2.1.1 创建偶数判断规则
2.1.2 创建测试方法
2.1.3 测试结果
2.2 示例2-判断性别
2.2.1 创建变量类
2.2.2 创建2个规则类
2.2.3 创建测试类
2.2.4 测试结果
猜你喜欢
- 2024-10-07 8大能力引擎 -流程引擎(流程级能力)
- 2024-10-07 规则引擎Drools 6.5 Final 入门(规则引擎 aviator)
- 2024-10-07 自定义搭建的工作流引擎系统一谈(工作流引擎框架对比)
- 2024-10-07 轻量级的java表达式引擎aviator,使用起来还是比较简单方便。
- 2024-10-07 SpringBoot系列——Activiti7工作流引擎
- 2024-10-07 自助搭建工作流的流程引擎梳理详解
- 2024-10-07 浅浅学习Spring下Drools规则引擎使用
- 2024-10-07 Java规则引擎2.1.8版本新增功能说明
- 2024-10-07 开源流程引擎camunda快速体验(开源流程引擎 工作流)
- 2024-10-07 Java规则引擎风控系统全套成品源代码
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)