Java规则引擎-MVEL表达式解析器

MVEL是一个功能强大的基于Java应用程序的表达式语言。
目前最新的版本是2.0,具有以下特性:
(1). 动态JIT优化器。当负载超过一个确保代码产生的阈值时,选择性地产生字
节代码,这大大减少了内存的使用量。新的静态类型检查和属性支持,允许集成
类型安全表达。
(2). 错误报告的改善。包括行和列的错误信息。
(3). 新的脚本语言特征。MVEL2.0 包含函数定义,如:闭包,lambda定义,
标准循环构造(for, while, do-while, do-until…),空值安全导航操作,内联with
-context运营 ,易变的(isdef)的测试运营等等。
(4). 改进的集成功能。迎合主流的需求,MVEL2.0支持基础类型的个性化属性处理器,集成到JIT中。
(5). 更快的模板引擎,支持线性模板定义,宏定义和个性化标记定义。
(6). 新的交互式shell(MVELSH)。

(7). 缺少可选类型安全
(8). 集成不良,通常通过映射填入内容。没有字节码不能运作用字节码生成编
译时间慢,还增加了可扩展性问题;不用字节码生成运行时执行非常慢
(9). 内存消耗过大
(10). Jar巨大/依赖规模

使用代码:

 

 

    @Test
    public void evalList(){
        String expression = "['Jim','Bob','Tom']";
        List<String> list = (List<String>) MVEL. eval(expression);
        for(String str : list){
            System. out.println(str);
        }
    }

    @Test
    public void evalArray(){
        String expression = "{'Jim','Bob','Tom'}";
        Object array = MVEL.eval(expression);
        if(array.getClass().isArray()){
            System.out.println(Array.get(array, 0));
        }

        String intExpress = "{1,2,3,4}";
        Object eval = MVEL.eval(intExpress);
        if(eval.getClass().isArray()){
            Object o = Array.get(eval, 0);
            System.out.println((int)o);
        }
    }


    @Test
    public void evelMap(){
//        String expression = "a == empty && b == empty";
//        Map<String, Object> paramMap = Maps.newHashMap();
//        paramMap.put("a", "");
//        paramMap.put("b", null);
//        Object object = MVEL.eval(expression, paramMap);
//        System.out.println(object); // true


//        String expression = "a == b";
//        Map<String, Object> paramMap = Maps.newHashMap();
//        paramMap.put("a", "123");
//        paramMap.put("b", 123);
//        Object object = MVEL.eval(expression, paramMap);
//        System.out.println(object); // true

        String express = "[\"Bob\" : new com.rec.pojo.Person(\"Bob\"), \"Michael\" : new com.rec.pojo.Person(\"Michael\")]";
        Map eval = (Map)MVEL.eval(express);
        System.out.println(eval.entrySet());
    }

参考文章: https://www.jianshu.com/p/41ea7a43093c

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值