Java规则引擎 Aviator 5.0 新版本试水

Aviator 5.0 重大更新内容新增了脚本语言 AviatorScrip
以往我们使用规则引擎场景是:java 调用规则引擎,根据规则引擎的处理结果来执行下一步。
Aviator 5.0 打破了这一场景,实现了java代码与规则引擎的相互调用。Aviator 5.0用户手册

这可能会带来一场新的变革
以往我们一套代码应用于多个项目,有些定制化需求可能是通过多个代码分支或者增加系统参数配置来实现的,而最终都是需要修改源代码。 Aviator 5.0 对改变这种模式提供一种可能,不同项目可以共用一个代码分支,通过使用不同的脚本来实现。
闲话少说直接上代码

项目依赖

       <dependency>
            <groupId>com.googlecode.aviator</groupId>
            <artifactId>aviator</artifactId>
            <version>5.0.0</version>
        </dependency>

简单示例

Java 类

package com.test.rule.aviator;

import com.googlecode.aviator.annotation.Function;
import com.googlecode.aviator.annotation.Import;
import com.googlecode.aviator.annotation.ImportScope;

/**
 * @ClassName TestUtil
 * @Description TODO
 * @Author demo
 * @Date 2020-04-29 14:57
 */
@Import(ns = "test", scopes = {ImportScope.Static})
public class TestUtil {
    @Function(rename = "excute1")
    public static int test1(String str){
        System.out.println("execute test1:"+str);
        return 1;
    }
    public static int test2(String str){
        System.out.println("execute test2:"+str);
        return 2;
    }
    public static int test3(String str){
        System.out.println("execute test3:"+str);
        return 3;
    }
}

Aviator 脚本

if a>0&&a<=1{
  return test.excute1("执行方法1");
}
if a>1&&a<3{
 return test.test2("执行方法2");
}
if a>=3&&a<6{
  return test.test3("执行方法3");
}
return test.excute1("默认执行方法1");

规则执行

package com.test.rule.aviator;

import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;

import java.io.IOException;

/**
 * @ClassName Demo5
 * @Description TODO
 * @Author demo
 * @Date 2020-04-29 14:59
 */
public class Demo5 {
    public static void main(String[]args) throws NoSuchMethodException, IllegalAccessException, IOException {
       AviatorEvaluator.importFunctions(TestUtil.class);
        Expression exp = AviatorEvaluator.getInstance().compileScript("rule/function2.av");
        Object result = exp.execute(exp.newEnv("a", 1));
        System.out.println("result: " + result);
         result = exp.execute(exp.newEnv("a", 2));
        System.out.println("result: " + result);
        result = exp.execute(exp.newEnv("a", 5));
        System.out.println("result: " + result);
         result = exp.execute(exp.newEnv("a", 10));
        System.out.println("result: " + result);
    }
}

运行结果

execute test1:执行方法1
result: 1
execute test2:执行方法2
result: 2
execute test3:执行方法3
result: 3
execute test1:默认执行方法1
result: 1
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值