Aviator Evaluator 使用入门(一)

https://www.yuque.com/boyan-avfmj/aviatorscript/tvahat

一、什么是规则引擎

  1. 定义:规则引擎是一种软件系统,用于执行基于规则的推理。它将业务规则与事实数据相结合,得出结论。

  2. 组成:规则引擎通常由规则存储库、推理引擎、工作内存 3个部分组成。

  3. 工作流程:获取输入数据,加载规则,匹配规则,执行动作,产生输出结果。

二、Aviator Evaluator 介绍

  1. 简介:Aviator是一个轻量级的Java表达式执行引擎,可以编译和执行表达式。

  2. 特点:语法简单,性能高效,支持脚本和编程语言,线程安全等。

  3. 用途:常用于规则匹配、业务流程、算法计算等场景。

三、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);

四、使用场景

  1. 规则引擎:匹配规则条件,进行规则推理。

  2. 工作流引擎:判断节点的进入条件。

  3. 业务规则:计算订单价格、积分等。

  4. 过滤条件:实现查询语句的where条件过滤。

  5. 逻辑外置:将条件逻辑放在数据库中,实现动态调整

五、总结

  1. 明确了什么是规则引擎,它通过规则匹配实现业务决策的方式。这种将业务规则和代码逻辑分离的思想值得学习

  2. 通过表达式可以实现很多有趣的功能,比如动态查询、规则匹配、流程控制等。

  3. 理解了将复杂问题拆解的思想。规则引擎通过将业务规则拆解为较小的条件表达式,实现了易维护、易扩展、高性能的系统,同时这种思想也适用于其他复杂问题的解决。

  4. 认识到合理应用框架的重要性。熟练使用高质量的框架可以极大地提高工作效率和系统质量

Google Aviator Evaluator 使用入门(一)的更多相关文章

  1. Google Go 语言从入门到应用必备开源项目

    Go 语言于 2009 年 11 月正式宣布推出,成为开放源代码项目,发展至今已经具有越来越广泛的影响力,今年更是在 TIOBE 编程语言排行榜中跻身 20 强.很多开发者也逐渐将目光投向这门语言,本 ...

  2. Google Protocol Buffers 快速入门(带生成C#源码的方法)

    Google Protocol Buffers是google出品的一个协议生成工具,特点就是跨平台,效率高,速度快,对我们自己的程序定义和使用私有协议很有帮助. Protocol Buffers入门: ...

  3. Google Chrome浏览器调试入门————转载只为自己查看方便

    Google Chrome浏览器调试 作为Web开发人员,我为什么喜欢Google Chrome浏览器 [原文地址:http://www.cnblogs.com/QLeelulu/archive/20 ...

  4. Google搜索技巧-从入门到精通(从此学习进步、工作顺心)

    转载:http://www.blogbus.com/koudaizhi-logs/55687286.html 一  GOOGLE简介 Google (www.google.com)是一个搜寻引擎,由某 ...

  5. Google Chrome浏览器插件入门开发

    --1. 在html文件中引用js 文件 --2.在Google Chrome中开发简单插件 1.首先,简单说明一下在html 中引用js 文件: 将kittenbook.html 和 kittenb ...

  6. Google搜索技巧-入门篇

    基本搜索 Google 查询简洁方便,仅需输入查询内容并敲一下回车键 (Enter),或单击“Google 搜索”按钮即可得到相关资料. 搜索两个及两个以上关键字 Google 只会返回那些符合您的全 ...

  7. Google Chrome调试js入门

    平常在开发过程中,经常会接触到前端页面.那么对于js的调试那可是家常便饭,不必多说.最近一直在用火狐的Firebug,但是不知道怎么的不好使了.网上找找说法,都说重新安装狐火浏览器就可以了,但是我安装 ...

  8. 如何使用Google Map API开发Android地图应用

    两年前开发过的GoogleMap已经大变样,最近有项目要用到GoogleMap,重新来配置Android GoogleMap开发环境,还真是踩了不少坑. 一.下载Android SDK Manager ...

  9. JBPM4入门——7.等待节点的单条线手动执行

    本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...

  10. JBPM4入门——6.流程实例的创建和执行

    本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...

随机推荐

  1. [oeasy]python0132_[趣味拓展]emoji_表情符号_抽象话_由来_流汗黄豆

    emoji表情符号 回忆上次内容 上次了解了unicode 和 utf-8 unicode是字符集 utf-8是一种可变长度的编码方式 utf-8是实现unicode的存储和传输的现实的方式   ​ ...

  2. 领域驱动设计(DDD)分层架构的三种模式

    模式一:四层架构 1.User Interface为用户界面层(或表示层),负责向用户显示信息和解释用户命令.这里指的用户可以是另一个计算机系统,不一定是使用用户界面的人.2.Application为 ...

  3. 使用win server 2019服务器的iis服务发布静态网页

    1.首先远程连接到服务器 2.打开服务器管理器 3添加角色和功能 4.安装类型:选择基于角色或基于功能的安装  →服务器角色:从服务器池中选择服务器 5.服务器角色选择Web服务器(iis) 6.功能 ...

  4. java面试一日一题:在创建微服务时,是用RPC还是http

    问题:请讲下在做微服务时,是使用RPC还是http 分析:该问题主要考察对RCP及http的理解,也关系到在进行微服务选型时的两大方向,dubbo和springCloud,都是RPC框架,但前者是RP ...

  5. 安全可信,Solon v2.8.6 发布

    Solon 框架! Java "纯血国产"应用开发框架.开放原子开源基金会,孵化项目.从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态. 追求: 更快.更小.更 ...

  6. C++命名空间、标准输入输出、引用

    1.简述C++中命名空间的作用. 答:避免重复定义全局变量的问题. 2.定义两个命名空间A 和 B 分别在A中和B中定义变量value.在main函数中将两个空间的value打印出来. #includ ...

  7. LinuxUDP通讯

    目录 前言 一.UDP通讯 1.UDP通讯概述 2.UDP的特点 3.UDP的应用 二.UDP基本通讯 1.socket函数 2.bind函数 2.1 主机字节序和网络字节序 2.2 点分制十进制转换 ...

  8. 7、SpringBoot2之整合事务及AOP

    本文在SpringBoot2之整合Mybatis的基础上进行 7.1.整合事务 7.1.1.mapper接口 int deleteEmployeeById(int id); 7.1.2.mapper映 ...

  9. Jax框架的Traced object特性与TensorFlow的placeholder的一致性

    前文: Jax框架的static与Traced Operations -- Static vs Traced Operations 前文讨论分析了Jax的static特性和Traced特性,这些谈下个 ...

  10. 【转载】 arch linux下nvidia 驱动死机问题

    原文地址: https://my.oschina.net/u/947271/blog/288063 ================================================== ...