j-easy/easy-rules: Java简单的规则引擎


Easy Rules 是一个简单而强大的 Java 规则引擎,提供以下功能:

  • 轻量级框架和易于学习的 API
  • 基于 POJO 的开发
  • 有用的抽象来定义业务规则并轻松应用它们
  • 从原始规则创建复合规则的能力
  • 使用表达式语言(如 MVEL、SpEL 和 JEXL)定义规则的能力

您可以自己构建一个简单的规则引擎。您只需要创建一堆具有条件和操作的对象,将它们存储在一个集合中,然后运行它们以评估条件并执行操作。
这正是 Easy Rules 所做的,它提供了Rule创建具有条件和操作的规则的抽象,以及RulesEngine贯穿一组规则以评估条件和执行操作的 API。
核心功能
  • 轻量级库和易于学习的 API
  • 基于 POJO 的开发,带有注释编程模型
  • 用于定义业务规则并使用 Java 轻松应用它们的有用抽象
  • 从原始规则创建复合规则的能力
  • 使用表达式语言(如 MVEL、SpEL 和 JEXL)定义规则的能力

定义代码:
@Rule(name = "weather rule", description = "if it rains then take an umbrella")
public class WeatherRule {

    @Condition
    public boolean itRains(@Fact(
"rain") boolean rain) {
        return rain;
    }
    
    @Action
    public void takeAnUmbrella() {
        System.out.println(
"It rains, take an umbrella!");
    }
}

使用:

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();

测试:

public class Test {
    public static void main(String[] args) {
        // define facts
        Facts facts = new Facts();
        facts.put(
"rain", true);

       
// define rules
        Rule weatherRule = ...
        Rules rules = new Rules();
        rules.register(weatherRule);

       
// fire rules on known facts
        RulesEngine rulesEngine = new DefaultRulesEngine();
        rulesEngine.fire(rules, facts);
    }
}