Easy Rules 規則引擎詳解

Easy Rules 規則引擎詳解

Easy Rules 是一個輕量級的 Java 規則引擎,它提供了一種簡單而強大的方式來定義和執行業務規則。以下是 Easy Rules 的詳細介紹:

1. 核心概念

1.1 規則 (Rule)

  • 條件 (Condition): 當條件為 true 時執行動作
  • 動作 (Action): 條件滿足時執行的操作

1.2 規則引擎 (RulesEngine)

  • 負責評估規則條件并執行相應動作
  • 兩種類型:DefaultRulesEngineInferenceRulesEngine

2. 基本使用

2.1 添加依賴

<dependency><groupId>org.jeasy</groupId><artifactId>easy-rules-core</artifactId><version>4.1.0</version>
</dependency>

2.2 定義規則

方式1: 注解方式
@Rule(name = "weather rule", description = "if it rains then take an umbrella")
public class WeatherRule {@Conditionpublic boolean itRains(@Fact("rain") boolean rain) {return rain;}@Actionpublic void takeAnUmbrella() {System.out.println("It rains, take an umbrella!");}
}
方式2: 流式API
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();
方式3: 使用表達式語言 (MVEL/SpEL)
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!\");");

2.3 執行規則

// 創建事實
Facts facts = new Facts();
facts.put("rain", true);// 創建規則引擎
RulesEngine rulesEngine = new DefaultRulesEngine();// 注冊規則
rulesEngine.fire(rules, facts);

3. 高級特性

3.1 規則優先級

@Rule(priority = 1) // 數字越小優先級越高
public class HighPriorityRule {// ...
}

3.2 規則監聽器

rulesEngine.registerRuleListener(new RuleListener() {@Overridepublic boolean beforeEvaluate(Rule rule, Facts facts) {// 在評估條件前調用return true; // 返回false跳過此規則}@Overridepublic void afterExecute(Rule rule, Facts facts) {// 在動作執行后調用}
});

3.3 規則組

@Rule(name = "rule1", priority = 1)
public class Rule1 { /* ... */ }@Rule(name = "rule2", priority = 2)
public class Rule2 { /* ... */ }Rules rules = new Rules();
rules.register(new Rule1());
rules.register(new Rule2());// 創建規則引擎參數
Parameters parameters = new Parameters().skipOnFirstAppliedRule(true); // 第一個規則應用后跳過其余規則RulesEngine rulesEngine = new DefaultRulesEngine(parameters);

3.4 推理引擎

RulesEngine rulesEngine = new InferenceRulesEngine();// 會持續應用規則直到沒有規則可應用
rulesEngine.fire(rules, facts);

4. 與其他規則引擎比較

特性Easy RulesDroolsJess
學習曲線中高
功能基礎全面全面
性能
適用場景簡單規則復雜業務規則復雜規則
依賴

5. 最佳實踐

  1. 保持規則簡單:每個規則只關注一個特定條件
  2. 使用合理的優先級:明確規則執行順序
  3. 避免規則循環:特別是在使用推理引擎時
  4. 合理使用事實:確保事實對象是不可變的
  5. 考慮規則的可維護性:為規則添加清晰的描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919288.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919288.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

優雅設計:打造AI時代的高效后端API接口——領碼課堂深度解析

&#x1f4cc; 摘要 后端API接口已經成為軟件架構的神經系統。微服務演化、AI滲透、自動化治理……這些趨勢迫使我們重新定義接口設計的標準。本文從統一規范、參數校驗、異常處理、性能優化四大維度出發&#xff0c;結合領碼Spark的接口治理平臺與AI賦能實踐&#xff0c;構建一…

【VUE】用EmailJS自動發送郵件到網易郵箱

1.注冊 EmailJS 賬號??&#xff1a;訪問 EmailJS 官網并注冊2.添加電子郵件服務??&#xff1a;在 Dashboard 中點擊 "Add New Service"選擇 SMTP server填寫 SMTP 服務器信息SMTP Host: smtphz.qiye.163.com (網易企業郵箱)SMTP Port: 994 (SSL)User: 你的郵箱Ap…

Ubuntu下載、安裝、編譯指定版本python

下載 Index of /ftp/python/ https://www.python.org/downloads/ 刪除舊的python sudo apt autoremove python sudo apt autoremove python3 安裝依賴 sudo apt-get install -y zlib1g-dev libbz2-dev libssl-dev libncurses5-dev \ libsqlite3-dev libreadline-dev tk-d…

如何新建一個自己的虛擬環境

在今天我換了個電腦跑模型的時候&#xff0c;出現了一個問題&#xff1a;C:\ProgramData\Anaconda3\python.exe H:/ywp/project/model/msi_caijian.py Traceback (most recent call last):File "H:/ywp/project/model/msi_caijian.py", line 2, in <module>imp…

(第十八期)圖像標簽的三個常用屬性:width、height、border

&#xff08;第十八期&#xff09;圖像標簽的三個常用屬性&#xff1a;width、height、border 在網頁開發中&#xff0c;控制圖片尺寸與樣式是基礎又高頻的操作。本文圍繞 img 圖像標簽的三個屬性展開&#xff1a;width&#xff08;寬度&#xff09;、height&#xff08;高度&a…

Windows桌面自動化的革命性突破:深度解析Windows-MCP.Net Desktop模塊的技術奧秘

"在數字化浪潮中&#xff0c;桌面自動化不再是程序員的專利&#xff0c;而是每個人都能掌握的超能力。" —— 當我第一次接觸到Windows-MCP.Net的Desktop模塊時&#xff0c;這樣的感慨油然而生。 &#x1f3af; 引言&#xff1a;為什么桌面自動化如此重要&#xff1f…

免費又強大的 PDF 編輯器 ——PDF XChange Editor

在日常的學習和工作中&#xff0c;我們經常會與 PDF 文檔打交道&#xff0c;然而&#xff0c;PDF 文檔的編輯卻常常讓人抓狂。比如拿到一份 PDF 合同或報告&#xff0c;發現里面有錯別字或者需要更新數據&#xff1b;又或者遇到需要填寫的 PDF 表單&#xff0c;只能打印出來手寫…

Unity引擎播放HLS自適應碼率流媒體視頻

大家好&#xff0c;我是阿趙。今天來學習一下Unity引擎怎樣播放自適應碼率視頻的方法。 一、 HLS是什么HLS是什么&#xff0c;各位可以自己百度一下。簡單的概括&#xff0c;HLS是一種自適應碼率流媒體傳輸協議&#xff0c;實現的是分片下載和動態碼率切換。它的原理是把一段視…

Flink 源碼系列 - 前言

Flink 源碼系列 - 前言 &#x1f680; 為什么要學習 Flink 源碼&#xff1f; Apache Flink 作為當前最流行的流式計算框架之一&#xff0c;其源碼體系極其龐大。根據統計&#xff0c;Flink 項目包含&#xff1a; Java 文件總行數&#xff1a;232萬行有效代碼行數&#xff1a…

Rust:實現僅通過索引(序數)導出 DLL 函數的功能

在 Rust 中&#xff0c;可以通過手動控制導出來實現僅通過索引&#xff08;序數&#xff09;導出 DLL 函數的功能。以下是具體方法和完整步驟&#xff1a;解決方案 通過結合 .def 文件&#xff08;模塊定義文件&#xff09;和 MSVC 鏈接器參數來實現函數名隱藏&#xff0c;只暴…

部分網站記錄

Gradle多渠道打包[umeng] https://www.jianshu.com/p/8b8fdd37bf26 介紹在app的build.gradle設置produceFlavors&#xff0c;一鍵打包所有環境的命令 Android 知識圖譜 https://upload-images.jianshu.io/upload_images/19956127-1b214e26967dacc6.jpg 百度的語音識別 https:…

【速通】深度學習模型調試系統化方法論:從問題定位到性能優化

深度學習模型調試的系統化方法論&#xff1a;從問題定位到性能優化 文章目錄深度學習模型調試的系統化方法論&#xff1a;從問題定位到性能優化摘要1. 引言2. 模型調試的層次化框架2.1 三層調試架構2.2 調試優先級原則3. 系統化調試流程3.1 快速診斷清單3.2 最小可復現案例 (MR…

Nacos-6--Naco的QUIC協議實現高可用的工作原理

QUIC&#xff08;Quick UDP Internet Connections&#xff09;是一種基于UDP的傳輸層協議&#xff0c;旨在減少網絡延遲、提升安全性并優化多路復用能力。它由Google開發&#xff0c;后被IETF標準化為HTTP/3的底層協議。 1、QUIC是什么&#xff1f; QUIC&#xff08;Quick UDP …

python實現pdfs合并

靈感來源于博主正在學408&#xff0c;在搞到視頻課對應的ppt.pdf后發現pdf是按小節的&#xff0c;以至于每章有5-10甚至更多&#xff0c;這可太繁瑣了&#xff0c;我想要一章一個pdf就可以了&#xff0c;于是淺淺查了幾個CSDN發現使用python的要么收費要么要vip&#xff0c;不用…

51單片機-驅動74HC595芯片實現IO口擴展模塊教程

本章概述思維導圖&#xff1a; 51單片機驅動74HC595芯片實現IO口擴展 74HC595芯片簡介 74HC595是一款8位串行輸入、并行輸出的移位寄存器&#xff0c;屬于硅結構的CMOS器件。它能將串行輸入數據轉換為并行輸出&#xff0c;其中并行輸出為三態輸出&#xff08;即高電平、低電平…

錄音轉文字,如何做到“快、準、狠“多格式通吃?

MP3、FLAC、M4A、OGG、WAV、MP4等多種常見音頻格式&#xff0c;一鍵精準轉成文字&#xff0c;讓辦公效率翻倍提升&#xff01;&#x1f525; 真實痛點場景&#xff1a;告別低效&#xff0c;迎接智能辦公緊急會議紀要&#xff0c;爭分奪秒&#xff01;上午10點剛結束一場跨部門腦…

【秋招】2025.08.16京東秋招機考真題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍在線刷題 bishipass.com 京東 題目一:魔法水晶陣列能量優化 1??:理解逆序對的變化規律,分析區間操作對逆序對的影響 2??:選擇后綴區間避免產生新的逆序對,只最大化消除的逆序對…

RocksDB 解密可逆哈希:BijectiveHash的設計奧秘

BijectiveHash&#xff08;雙射哈希&#xff0c;即可逆哈希&#xff09;的設計精髓在于它借鑒了現代密碼學和高性能哈希函數中的核心思想&#xff0c;但目標并非加密&#xff0c;而是實現一種無沖突、可逆的置換&#xff08;Permutation&#xff09;。可逆哈希是什么&#xff0…

05.用戶和組管理命令

用戶和組管理命令用戶和組管理命令1. getent2. useradd3. usermod4. userdel5. id6. su7. passwd8. chage9. groupadd10. groupmod11. groupdel12. gpasswd13. groupmems用戶和組管理命令 用戶和組的主要配置文件 /etc/passwd&#xff1a;用戶及其屬性信息(名稱、UID、主組ID…

go 多版本共存【goup + alias方案】

一、需求背景 以go1.21為主&#xff0c;臨時可以快速切換到go1.23,且只有當前窗口生效 二、安裝 安裝 goup go install github.com/owenthereal/goup/cmd/gouplatest安裝 go1.23 # 注意這里是安裝新的sdk,如果你本地存在相同版本的話&#xff0c;應該保持統一用goup安裝的 goup…