Java中的规则引擎

这篇具有很好参考价值的文章主要介绍了Java中的规则引擎。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java 中的规则引擎为我们提供了一个以灵活且定义的方式管理和执行业务规则的框架。这些引擎使开发人员能够在不更改核心应用程序的情况下更轻松地修改和理解规则,从而将业务逻辑与应用程序代码分开。

规则引擎旨在评估条件并根据指定规则触发操作。它们还为我们提供了一种更加动态和适应性更强的方法来处理复杂的决策过程。本文介绍了允许开发人员自动化其软件应用程序逻辑的各种规则引擎。通过集成这些规则引擎,开发人员可以为业务策略的自动化做出重大贡献,最终产生更强大、更有效的软件应用程序。

Java 中的规则引擎是什么?
Java中的规则引擎确实是强大的工具,可以自动化业务逻辑,从而实现更高效的决策过程。这些引擎允许开发人员独立于应用程序代码定义和管理业务规则,提供灵活的条件和操作,从而允许动态决策方法来处理复杂的决策场景。将业务规则与核心应用程序逻辑分离有助于更好的代码组织、可重用性和易于维护。

规则引擎的好处:

  1. 它为我们提供了很好的代码可重用性。
  2. 由于规则引擎独立于相关应用程序代码运行,因此无需直接操作源代码,从而降低了复杂性。
  3. 它还提供了可读性和灵活性,我们可以在不更改源代码中的任何内容的情况下更改规则。
  4. 它允许将业务规则与应用程序代码分离,而不影响核心程序。
  5. 它有助于业务专家和开发人员在不了解高级编码技能的情况下进行协作,从而使决策非常有效和合乎逻辑。

规则引擎如何工作?
第 1 步:设置您的 Java 项目
要设置 Java 项目,您需要创建一个新的 Java 项目,也可以使用现有项目。在 Java 项目中实现规则引擎之前,您必须准备一个 Java 项目,并在 Java 项目中配置所需的设置。

步骤 2:在 pom.xml 文件或 yml 文件中添加规则引擎工具依赖项。
例如,如果您使用的是Maven,则在 xml 文件中添加 Drools 引擎的依赖项。

 
 
org.drools  
drools-core  
7.65.0.Final
 

第 3 步:创建事实类
事实类是指表示将应用规则的数据或事实的类,在以下示例中,“Person”类被视为事实类。通常在规则引擎中,特别是在Drools规则引擎的情况下,class.java被替换为事实类并且通常表示为class.java或person.java。

// Person.java public class Person { 
private String name; 
private int age; 
private boolean eligibleForDiscount; 
private boolean specialStatus; // Your Getters and setters
}

第 4 步:在 Java 项目中编写规则
在这里,我们为 Drools 规则引擎创建一个名为“GeeksRule.drl”的规则文件,其中“drl”是 Drools 规则的扩展名。

// GeeksRule.drl rule "Test Rule" when 
$person: Person(age < 30, name.contains("Test")) 
then 
$person.setSpecialStatus(true); 
end

“Test”规则是分配给该规则的名称,它用作识别和可读性的标签,“结束”标记表示该特定规则的结束。这条规则规定,如果一个人的年龄小于30岁,并且其名字中包含“Test”,那么他们将被授予特殊身份。

第 5 步:在 Java 代码中使用 Drools
创建一个 Java 类以使用 Drools 来评估 Test 规则。

import org.kie.api.*; 
import org.kie.api.runtime.*; 

public class RuleEngineExample { 
public static void main(String[] args) { 
KieServices kieServices = KieServices.Factory.get(); 
KieContainer kieContainer = kieServices.getKieClasspathContainer(); 
KieBase kieBase = kieContainer.getKieBase(); 
KieSession kieSession = kieBase.newKieSession(); 

        Person person = new Person("Test User", 25); 
kieSession.insert(person); 

        int ruleFiredCount = kieSession.fireAllRules(); 

        System.out.println("Rules fired: " + ruleFiredCount); 
System.out.println("Is person eligible for a special status? " + person.isSpecialStatus()); 

        kieSession.dispose(); 

}

第 6 步:运行 Java 项目
运行您的 Java 项目,您应该看到输出,指示 Test 规则是否被解雇,以及该人是否有资格根据提供的姓名和年龄获得特殊状态。上面的示例演示了如何使用 Drools 在 Java 项目中应用与 Test 相关的规则。根据您的特定用例的需要调整规则和数据对象。

Java 中流行的规则引擎
1.Drools
Drools规则引擎被广泛称为“业务规则管理系统”(BRMS),它被广泛用作Java的开源规则引擎,它有助于鼓励开发人员实现和管理此类复杂的业务逻辑。具有专有功能,Drools 是不同领域中基于规则的软件应用程序的 Java 开发人员的首选。

// Define a rule rule "Example Rule" when 
$fact: SomeObject(property > 10) 
then // Actions to be executed when the rule is matched $fact.setFlag(true); 
end

2.Jess
Jess是一个专为Java平台设计的规则引擎,在开发专家系统时经常在Java应用程序中使用。其用户友好的脚本语言和强大的推理引擎使其非常适合复杂的决策制定,并有助于将其建立为此类任务的有价值的选择,这些任务需要在 Java 应用程序中使用基于高级规则的系统。

// Define a rule
(defrule example-rule 
(some-object (property > 10)) 
=> 
(modify some-object (set-flag true)))

3. Easy Rule
Easy Rules 被认为是 Java 的轻量级且简单的规则引擎,其突出之处在于提供规则抽象,用于根据定义的操作和条件创建规则。它的简单性和灵活性使其成为寻求简单而有效的解决方案来实现和管理 Java 应用程序中的规则并促进应用程序中业务逻辑的无缝集成的开发人员的首选。

// Define a rule
Rule someRule = new BasicRuleBuilder() 
.name("Example Rule") 
.when(facts -> facts.get("property", Integer.class) > 10) 
.then(facts -> facts.put("flag", true)) 
.build();

4. RuleBook
规则手册提供了用户友好且灵活的 DSL,使其规则创建变得简单。而对于较大的规则集合,开发人员可以将规则平滑地集成到带注释的POJO类中。RuleBook 有效地将这个包转换为有组织的规则手册,从而简化了 Java 应用程序中各种规则的组织和管理。

public class DelftstackRule { 
public RuleBook defineDelftstackRules() { 
return RuleBookBuilder.create() 
.addRule(rule -> rule.withNoSpecifiedFactType().then(f -> System.out.print("Delftstack"))) 
.addRule(rule 
-> rule.withNoSpecifiedFactType().then( 
f -> System.out.println("The Best Tutorial Site"))) 
.build(); 

}

5.OpenL Tablets
OpenL Tablets 是一个用于 Java 的开源业务规则和决策管理系统,它是业务规则引擎和管理系统中不可或缺的组件。它的适应性和可扩展性使其成为那些寻求强大的解决方案以在 Java 应用程序中有效地实施、组织和管理其业务规则的开发人员的宝贵工具,它还确保了高效的决策过程。

// Define a rule in OpenL Tablets
public class Rules { 
public boolean exampleRule(int property) { 
return property > 10; 

}

6.Eclipse OCL(对象约束语言)
Eclipse OCL(对象约束语言)不仅仅是一个规则引擎,因为它是一种专门的语言,旨在表达 UML 模型中对象的规则。其独特的功能使开发人员能够精确定义和执行规则,并塑造 Java 应用程序中对象的行为和关系,也使 Eclipse OCL 成为确保在此类复杂应用场景中的准确性和符合指定标准的宝贵资产。

// Define a constraint
context SomeObject 
inv: self.property > 10

7. Apache Jena 规则
Apache Jena 规则是一个 Java 框架,用于构建语义 Web 和链接数据应用程序,展示了专为处理 RDF 数据而设计的强大规则引擎。该框架为开发人员提供了强大的工具来导航、查询和推断 RDF 数据集中的关系,也使其成为那些从事涉及语义 Web 技术的高级应用程序开发的人员的重要资产。

// Define a rule in Jena String ruleString = "[r1: (?x ex:property ?y) -> (?x ex:flag true)]"; 
Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(ruleString));

8. Nools
Nools 被认为是Node.js的规则引擎,通过Nashorn JavaScript引擎的帮助,它可以轻松地将其实用性扩展到 Java,该引擎包含在从 Java 8 开始的Java 开发工具包 (JDK)中。这种兼容性增强了开发人员利用Nools 的基于规则的功能最初是为 Java 应用程序中的 Node.js 设计的,该规则为跨不同环境实施和管理规则提供了灵活的解决方案。

// Define a rule in Nools (JavaScript syntax)
define SomeRule { 
when { 
$s: SomeObject $s.property > 10

then { 
$s.flag = true

}

结论
总之,本文讨论了为什么 Java 规则引擎很重要,因为我们已经了解了它们如何帮助业务自动工作并更快地做出决策。这些引擎允许开发人员自己处理规则,使代码灵活且易于一起处理。Drools 的分步指南就像一堂实践课程,查看不同的引擎,如 Drools、Jess、Easy Rules、Rule Book、OpenL Tablets、Eclipse OCL、Apache Jena Rules 和 Nools,显示有很多选择。使用规则引擎就像赋予软件调整和保持强大的能力,这使得它们对于当今的 Java 开发非常有用。

https://www.jdon.com/71746.html文章来源地址https://www.toymoban.com/news/detail-845068.html

到了这里,关于Java中的规则引擎的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java源码规则引擎:jvs-rules 8月新增功能介绍

    JVS-rules是JAVA语言下开发的规则引擎,是jvs企业级数字化解决方案中的重要配置化工具,核心解决业务判断的配置化,常见的使用场景:金融信贷风控判断、商品优惠折扣计算、对员工考核评分等各种变化的规则判断情景。 8月是收获的季节,jvs-rules在这个季节到来之时做了大

    2024年02月14日
    浏览(44)
  • JS引擎(2):Java平台上JavaScript引擎—Rhino/Nashorn概述

    可以后端开发的 javascript引擎有 Chrome V8 基于C++ java的Rhino引擎(JDK6被植入),Java8 被替换为Nashorn Rhino和Nashorn都是用Java实现的JavaScript引擎。它们自身都是普通的Java程序,运行在JVM上 Rhino [ˈraɪnəʊ]是一种使用 Java 语言编写的 JavaScript 的开源实现,原先由Mozilla开发。 Rhino 是一种

    2023年04月09日
    浏览(42)
  • 规则引擎专题---2、开源规则引擎对比

    开源的规则引擎整体分为下面几类: 通过界面配置的成熟规则引擎,这种规则引擎相对来说就比较重,但功能全,比较出名的有:drools, urule。 基于jvm脚本语言,互联网公司会觉得drools太重了,然后会基于一些jvm的脚本语言自己开发一个轻量级的规则引擎,比较出名的有,gr

    2024年02月04日
    浏览(43)
  • Java----Sentinel持久化规则启动

    java -jar -Dnacos.add=8848 你的sentinel源码修改包.jar 前期准备: 1.引入依赖 在order-service中引入sentinel监听nacos的依赖: 2.配置nacos地址 在order-service中的application.yml文件配置nacos地址及监听的配置信息: 3.启动 启动方式跟官方一样: java -jar -Dserver.port=8180 sentinel-dashboard.jar 如果要修改

    2024年02月11日
    浏览(37)
  • java微服务商城高并发秒杀项目--011.授权规则和系统规则

    授权规则 在shop-order-server中新建RequestOriginParserDefinition.java,定义请求来源如何获取 在shop-order-server中新建AuthController.java,代码如下: 在dashboard中配置白名单和黑名单的相关信息: 设置PC为白名单: 访问测试 访问http://localhost:8091/auth1?serviceName=pc 可以访问 访问http://localhost:8091

    2023年04月16日
    浏览(40)
  • Java基础 驼峰规则、流程控制、自增自减

     命名规则(驼峰)、流程控制、自增自减。 上一篇文章中提到了标识符,在Java中很多标识符都需要我们自己起名,但起名的方式千百不一,会让代码看的杂乱无章,故在漫长的近三十年时光里,Java形成了一套完成的命名规则,各大公司也在内部进行了命名规范的制约,最

    2024年01月22日
    浏览(45)
  • 开发安全Java应用程序的13条规则((Mark)

    漏洞喜欢隐藏在复杂性中,因此在不牺牲功能的情况下使代码尽可能简单。使用成熟的设计原则(例如DRY)(不要重复),将帮助您编写更易于查看问题的代码。 始终在代码中公开尽可能少的信息。隐藏实施细节支持可维护和安全的代码。这三个技巧将大大有助于编写安全的

    2024年04月14日
    浏览(38)
  • Java 基础进阶篇(十八):正则表达式匹配规则和应用

      正则表达式是对字符串(包括普通字符(例如:a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正

    2024年02月13日
    浏览(54)
  • flink规则引擎设计思路

    在日常工作中我们经常收到一些诸如此类需求:“用户给点击了开屏广告,给用户下发私信”、“用户进入了推荐线,但在60秒内没有任何点击操作,弹框引导用户选择感兴趣的内容”、“用户点赞了某位作者的两篇以上的内容,但并没有关注过此作者,则弹框引导用户关注

    2024年02月05日
    浏览(38)
  • Drools 规则引擎原理

    基于Java的开源的规则引擎框架有很多,从实现原理上来说分为以下三类: 通过Java语言+RETE算法实现(drools和urule) 通过脚本语言+jvm实现(groovy) 通过Java表达式+jvm实现(Aviator) 从“频繁且通用”的业务变化中抽象出来的中间服务层,实现了将决策逻辑从应用代码中分离出来,

    2024年02月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包