电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java輕量級規則引擎easy-rules使用介紹

瀏覽:3日期:2022-08-31 08:59:11

輕量級規則引擎easy-rules--參考

我們在寫業務代碼經常遇到需要一大堆if/else,會導致代碼可讀性大大降低,有沒有一種方法可以避免代碼中出現大量的判斷語句呢?答案是用規則引擎,但是傳統的規則引擎都比較重,比如開源的Drools,不適合在小需求中應用。最近在github上面看到一個傻瓜式的Java規則引擎Easy-Rules,這里結合自己寫的demo介紹如何使用這個規則引擎,希望對大家有所幫助。

easy-rules的特點

輕量級類庫和容易上手 基于POJO的開發與注解的編程模型 基于MVEL表達式的編程模型(適用于極簡單的規則,一般不推薦) 支持根據簡單的規則創建組合規則 方便且適用于java的抽象的業務模型規則

它主要包括幾個主要的類或接口:Rule,RulesEngine,RuleListener,Facts還有幾個主要的注解:@Action,@Condition,@Fact,@Priority,@Rule

例1:基于POJO開發與注解的編程模型:判斷1-50中,被3或者8整除的數

首先maven 引入easy-rules

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

編寫規則POJO:

規則1

@Rule(name = '被3整除', description = 'number如果被3整除,打印:number is three')public class ThreeRule { /** * Condition:條件判斷注解:如果return true, 執行Action * * @param number * @return */ @Condition public boolean isThree(@Fact('number') int number) { return number % 3 == 0; } /** * Action 執行方法注解 * * @param number */ @Action public void threeAction(@Fact('number') int number) { System.out.println(number + ' is three'); } /** * Priority:優先級注解:return 數值越小,優先級越高 * * @return */ @Priority public int getPriority() { return 1; }}

規則2

@Rule(name = '被8整除')public class EightRule { /** * 條件 * * @param number * @return */ @Condition public boolean isEight(@Fact('number') int number) { return number % 8 == 0; } /** * 滿足條件的動作 * * @param number */ @Action public void eightAction(@Fact('number') int number) { System.out.println(number + ' is eight'); } /** * 條件判斷的優先級 * * @return */ @Priority public int getPriority() { return 2; }}

規則3(組合規則-同時執行)

@Rule(name = '被3和8同時整除', description = '這是一個組合規則')public class ThreeEightRuleUnitGroup extends UnitRuleGroup { public ThreeEightRuleUnitGroup(Object... rules) { for (Object rule : rules) { addRule(rule); } } @Override public int getPriority() { return 0; }}

規則4

@Rule(name = '既不被3整除也不被8整除', description = '打印number自己')public class OtherRule { @Condition public boolean isOther(@Fact('number') int number){ return number % 3 != 0 || number % 8 != 0; } @Action public void printSelf(@Fact('number') int number){ System.out.print(number); } @Priority public int getPriority(){ return 3; }}

執行規則

public class ThreeEightRuleLauncher { public static void main(String[] args) { /** * 創建規則執行引擎 * 注意: skipOnFirstAppliedRule意思是,只要匹配到第一條規則就跳過后面規則匹配 */ RulesEngineParameters parameters = new RulesEngineParameters().skipOnFirstAppliedRule(true); RulesEngine rulesEngine = new DefaultRulesEngine(parameters); //創建規則 Rules rules = new Rules(); rules.register(new EightRule()); rules.register(new ThreeRule()); rules.register(new ThreeEightRuleUnitGroup(new EightRule(), new ThreeRule())); rules.register(new OtherRule()); Facts facts = new Facts(); for (int i=1 ; i<=50 ; i++){ //規則因素,對應的name,要和規則里面的@Fact 一致 facts.put('number', i); //執行規則 rulesEngine.fire(rules, facts); System.out.println(); } }}

例2:基于MVEL表達式的編程模型

本例演示如何使用MVEL表達式定義規則,MVEL通過Easy-Rules MVEL模塊提供。此模塊包含使用MVEL定義規則的API。我們將在這里使用這些API,其目標是實現一個簡單的商店應用程序,要求如下:禁止兒童購買酒精,成年人的最低法定年齡為18歲。 商店顧客由Person類定義:

@Data@AllArgsConstructor@NoArgsConstructorpublic class Person { private String name; private boolean adult; private int age; //getter, setter 省略 public Person(String name, int age) { this.name = name; this.age = age; }}

我們定義兩個規則:

規則1:可以更新Person實例,判斷年齡是否大于18歲,并設置成人標志。 規則2:判斷此人是否為成年人,并拒絕兒童(即非成年人)購買酒精。

顯然,規則1的優先級要大于規則2,我們可以設置規則1的Priority為1,規則2的Priority為2,這樣保證規則引擎在執行規則的時候,按優先級的順序執行規則。

規則1的定義

Rule ageRule = new MVELRule().name('age rule').description('Check if person’s age is > 18 and marks the person as adult').priority(1).when('person.age > 18').then('person.setAdult(true);');

規則2的定義,我們放到alcohol-rule.yml文件中

name: 'alcohol rule' description: 'children are not allowed to buy alcohol' priority: 2 condition: 'person.isAdult() == false' actions: - 'System.out.println('Shop: Sorry, you are not allowed to buy alcohol');'

執行規則

public class ShopLauncher { public static void main(String[] args) throws Exception { //創建一個Person實例(Fact) Person tom = new Person('Tom', 19); Facts facts = new Facts(); facts.put('person', tom); //創建規則1 Rule ageRule = new MVELRule().name('age rule').description('Check if person’s age is > 18 and marks the person as adult').priority(1).when('person.age > 18').then('person.setAdult(true);'); //創建規則2 Rule alcoholRule = new MVELRuleFactory(new YamlRuleDefinitionReader()).createRule(new FileReader(ResourceUtils.getFile('classpath:alcohol-rule.yml'))); Rules rules = new Rules(); rules.register(ageRule); rules.register(alcoholRule); //創建規則執行引擎,并執行規則 RulesEngine rulesEngine = new DefaultRulesEngine(); System.out.println('Tom: Hi! can I have some Vodka please?'); rulesEngine.fire(rules, facts); System.out.println(JSON.toJSONString(tom)); }}

執行結果如下:

java輕量級規則引擎easy-rules使用介紹

本篇主要介紹easy-rules的使用

深入了解原理,可以查看github源碼:https://github.com/j-easy/easy-rules

到此這篇關于java輕量級規則引擎easy-rules使用介紹的文章就介紹到這了,更多相關java easy-rules內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 北京公司注册_代理记账_代办商标注册工商执照-企力宝 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | 【孔氏陶粒】建筑回填陶粒-南京/合肥/武汉/郑州/重庆/成都/杭州陶粒厂家 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 智慧旅游_智慧景区_微景通-智慧旅游景区解决方案提供商 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 陶瓷砂磨机,盘式砂磨机,棒销式砂磨机-无锡市少宏粉体科技有限公司 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 环球电气之家-中国专业电气电子产品行业服务网站! | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 成都装修公司-成都装修设计公司推荐-成都朗煜装饰公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 首页 - 张店继勇软件开发工作室| 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 影视模板素材_原创专业影视实拍视频素材-8k像素素材网 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 拉曼光谱仪_便携式|激光|显微共焦拉曼光谱仪-北京卓立汉光仪器有限公司 | 酒万铺-酒水招商-酒水代理| 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 蔬菜配送公司|蔬菜配送中心|食材配送|饭堂配送|食堂配送-首宏公司 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 |