Java表达式执行引擎 —— Aviator 快速入门

简介

Aviator是一个轻量级、高性能的Java表达式执行引擎。用于各种表达式的动态求值。

Aviator依赖了commons-beanutils,Aviator非常小, 加上依赖包也才450K,不算依赖包的话只有 70K。使用Aviator可以添加下面的maven依赖:

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

示例

    public static void main(String[] args) {
        tryEvaluator(5);
        tryVar();
        tryCompare();
        tryCustomFunction();
    }

    /**
     * 提取 对象/属性
     */
    private static void tryEvaluatorObj() {
        Map<String, Object> env = new HashMap<String, Object>();
        env.put("p", new PersonDO("yuan",1));

        Object p =  AviatorEvaluator.execute("p", env);
        Object name =  AviatorEvaluator.execute("p.name", env);
        Object age =  AviatorEvaluator.execute("p.age", env);
        // true
        System.out.println(p);
        System.out.println(name);
        System.out.println(age);
    }
    /**
     * 条件判断
     *
     * @param limit
     */
    private static void tryEvaluator(int limit) {
        Map<String, Object> env = new HashMap<String, Object>();
        env.put("limit", limit);
        boolean result = (boolean) AviatorEvaluator.execute("limit==5", env);
        // true
        System.out.println(result);
    }

    /**
     * 多变量使用
     */
    private static void tryVar() {
        String result = (String) AviatorEvaluator.exec("'hello '+yourName+', I am '+myName", "Tom", "Jerry");
        // hello Tom, I am Jerry
        System.out.println(result);
    }

    /**
     * 数据比较
     */
    private static void tryCompare() {
        Map<String, Object> env = new HashMap<String, Object>();

        Map<String, Object> objA = new HashMap<>();
        objA.put("state", 2);
        objA.put("code", "hhxx");

        Map<String, Object> objB = new HashMap<>();
        objB.put("status", 3);
        objB.put("code", "hhxxTTXS");

        env.put("a", objA);
        env.put("b", objB);


        boolean result = (boolean) AviatorEvaluator.execute("a.state<b.status || a.code==b.code", env);

        // true
        System.out.println(result);
    }

    /**
     * 自定义函数
     */
    private static void tryCustomFunction() {
        //注册函数
        AviatorEvaluator.addFunction(new AddFunction());
        // 3.0
        System.out.println(AviatorEvaluator.execute("add(1, 2)"));
        // 521.0
        System.out.println(AviatorEvaluator.execute("add(add(1, 20), 500)"));
    }

    static class AddFunction extends AbstractFunction {
        @Override
        public AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2) {
            Number left = FunctionUtils.getNumberValue(arg1, env);
            Number right = FunctionUtils.getNumberValue(arg2, env);
            return new AviatorDouble(left.doubleValue() + right.doubleValue());
        }

        @Override
        public String getName() {
            return "add";
        }
    }

Reference

  • https://my.oschina.net/kings0/blog/4710642
  • https://github.com/killme2008/aviatorscript
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值