Google Aviator Evaluator 使用入门(一)
Aviator Evaluator 使用入门(一)
https://www.yuque.com/boyan-avfmj/aviatorscript/tvahat
一、什么是规则引擎
定义:规则引擎是一种软件系统,用于执行基于规则的推理。它将业务规则与事实数据相结合,得出结论。
组成:规则引擎通常由规则存储库、推理引擎、工作内存 3个部分组成。
工作流程:获取输入数据,加载规则,匹配规则,执行动作,产生输出结果。
二、Aviator Evaluator 介绍
简介:Aviator是一个轻量级的Java表达式执行引擎,可以编译和执行表达式。
特点:语法简单,性能高效,支持脚本和编程语言,线程安全等。
用途:常用于规则匹配、业务流程、算法计算等场景。
三、Aviator Evaluator 代码案例
引入Maven
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>5.3.3</version>
</dependency>
Where Sql示例
String expression = "id > 1 && name == 'John'";
Map<String, Object> env = new HashMap<>();
env.put("id", 2);
env.put("name", "John");
AviatorScript compiledExp = AviatorEvaluator.compileScript(code);
Boolean result = (Boolean) compiledExp.execute(env);
if (result) {
System.out.println("执行SQL: SELECT * FROM table WHERE " + expression);
}
数学计算示例
String expression = "price * qty - discount";
Map<String, Object> env = new HashMap<>();
env.put("price", 10.5);
env.put("qty", 2);
env.put("discount", 5);
AviatorScript compiledExp = AviatorEvaluator.compileScript(code);
Double result = (Double) compiledExp.execute(env);
System.out.println("总价:" + result);
表达式示例
String expression = "a > 3 || b < 5 && c == 10";
Map<String, Object> env = new HashMap<>();
env.put("a", 1);
env.put("b", 6);
env.put("c", 10);
AviatorScript compiledExp = AviatorEvaluator.compileScript(code);
Boolean result = (Boolean) compiledExp.execute(env);
System.out.println("表达式结果:" + result);
4. 代码块示例
String code = "{" +
" int a = 1;" +
" int b = 2;" +
" System.out.println(a + b);" +
" return a + b;" +
"}";
AviatorScript script = AviatorEvaluator.compileScript(code);
Map<String, Object> env = new HashMap<>();
Number result = (Number) script.execute(env);
System.out.println("代码块结果:" + result);
四、使用场景
规则引擎:匹配规则条件,进行规则推理。
工作流引擎:判断节点的进入条件。
业务规则:计算订单价格、积分等。
过滤条件:实现查询语句的where条件过滤。
逻辑外置:将条件逻辑放在数据库中,实现动态调整
五、总结
明确了什么是规则引擎,它通过规则匹配实现业务决策的方式。这种将业务规则和代码逻辑分离的思想值得学习。
通过表达式可以实现很多有趣的功能,比如动态查询、规则匹配、流程控制等。
理解了将复杂问题拆解的思想。规则引擎通过将业务规则拆解为较小的条件表达式,实现了易维护、易扩展、高性能的系统,同时这种思想也适用于其他复杂问题的解决。
认识到合理应用框架的重要性。熟练使用高质量的框架可以极大地提高工作效率和系统质量。
Google Aviator Evaluator 使用入门(一)的更多相关文章
- Google Go 语言从入门到应用必备开源项目
Go 语言于 2009 年 11 月正式宣布推出,成为开放源代码项目,发展至今已经具有越来越广泛的影响力,今年更是在 TIOBE 编程语言排行榜中跻身 20 强.很多开发者也逐渐将目光投向这门语言,本 ...
- Google Protocol Buffers 快速入门(带生成C#源码的方法)
Google Protocol Buffers是google出品的一个协议生成工具,特点就是跨平台,效率高,速度快,对我们自己的程序定义和使用私有协议很有帮助. Protocol Buffers入门: ...
- Google Chrome浏览器调试入门————转载只为自己查看方便
Google Chrome浏览器调试 作为Web开发人员,我为什么喜欢Google Chrome浏览器 [原文地址:http://www.cnblogs.com/QLeelulu/archive/20 ...
- Google搜索技巧-从入门到精通(从此学习进步、工作顺心)
转载:http://www.blogbus.com/koudaizhi-logs/55687286.html 一 GOOGLE简介 Google (www.google.com)是一个搜寻引擎,由某 ...
- Google Chrome浏览器插件入门开发
--1. 在html文件中引用js 文件 --2.在Google Chrome中开发简单插件 1.首先,简单说明一下在html 中引用js 文件: 将kittenbook.html 和 kittenb ...
- Google搜索技巧-入门篇
基本搜索 Google 查询简洁方便,仅需输入查询内容并敲一下回车键 (Enter),或单击“Google 搜索”按钮即可得到相关资料. 搜索两个及两个以上关键字 Google 只会返回那些符合您的全 ...
- Google Chrome调试js入门
平常在开发过程中,经常会接触到前端页面.那么对于js的调试那可是家常便饭,不必多说.最近一直在用火狐的Firebug,但是不知道怎么的不好使了.网上找找说法,都说重新安装狐火浏览器就可以了,但是我安装 ...
- 如何使用Google Map API开发Android地图应用
两年前开发过的GoogleMap已经大变样,最近有项目要用到GoogleMap,重新来配置Android GoogleMap开发环境,还真是踩了不少坑. 一.下载Android SDK Manager ...
- JBPM4入门——7.等待节点的单条线手动执行
本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...
- JBPM4入门——6.流程实例的创建和执行
本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...
随机推荐
- 二分专题总结 -ZHAOSANG
上一周训练了二分专题 可能是我之前自学的时候基础没有打牢,做的时候还是吃力的. 现总结遇到的一些二分题型和思路 二分+模拟(题目最多的) [https://ac.nowcoder.com/acm/co ...
- Pandas库学习笔记(3)---Pandas Series
Pandas Series Pandas Series基本操作 pandas.Series Series结构如下: pandas.Series(data, index, dtype, copy) 构造 ...
- springsecurity流程梳理与总结
springsecurity的基本使用方法学习完了,还是有些懵圈,再回过头来梳理一下流程以及使用情况 1-4.传一个User实体,new一个UserPasswordAuthenticationToke ...
- .NET 开源快捷的数据库文档查询和生成工具
前言 在实际项目开发中,需求变更和项目迭代是常态.要求我们能够迅速响应,对数据库结构进行相应的调整,如添加新表.更新现有表结构或增加字段等. 为了确保团队成员之间的信息同步,实时更新和维护数据库文档变 ...
- Excel函数-相对引用和绝对引用
1.相对引用 公式填充时引用的相对位置不变,行和列.序号都相对递增 2.绝对引用 公式填充时应用的单元格绝对位置不变,行和列.序号都不变.绝对引用的符号是"$",也可以快捷键按F4 ...
- 人形机器人 —— NVIDIA公司给出的操作算法(动态操作任务,dynamic manipulation tasks)(机械手臂/灵巧手)框架示意图 —— NVIDIA Isaac Manipulator
原文: https://developer.nvidia.com/isaac/manipulator#foundation-models NVIDIA公司准备针对人形机器人的各部分操作分别推出一个AI ...
- mujoco安装报错:mujoco_py/cymj.pyx:67:5: Exception check on 'c_warning_callback' will always require the GIL to be acquired.
参考: https://blog.csdn.net/weixin_49373427/article/details/131981583 https://blog.csdn.net/CCCDeric/a ...
- spring5的新特性
1.背景 2.依赖环境的变化 整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方 法在代码库中删除 3.自带了通用的日志封装 3.1.日志的简单使用 Spr ...
- [POI2008] POC-Trains 题解
前言 题目链接:洛谷. 时间复杂度和输入同阶的做法. 题意简述 有 \(n\)(\(n \leq 10^3\))个长 \(m\) 的字符串,\(q\)(\(q \leq 10^5\))次操作,交换两个 ...
- 最短路之Dijkstra
Dijkstra算法: Dijkstra是一种求解 非负权图 上单源最短路径的算法. 思路:将所有结点分为两个集合:已经确定最短路径的点(S)和未确定最短路长度的点集(T),开始时所有点都属于T 初始 ...