首页 > 编程语言 >Java表达式引擎

Java表达式引擎

时间:2023-06-05 15:44:38浏览次数:40  
标签:Java name util 引擎 李思 org Test import 表达式

执行效率

在本地简单测试这几种表达式的执行时间,在频繁执行中mvel表现较好,以下数据仅供参考,未取平均值。

次数 ognl mvel spel jexl groovy 效率排序
10次耗时(毫秒) 67 72 151 64 547 jexl>ognl>mvel>spel>groovy
100次耗时(毫秒) 83 77 168 80 1487 mvel>jexl>ognl>spel>groovy
1000次耗时(毫秒) 175 125 236 194 6334 mvel>ognl>jexl>spel>groovy
10000次耗时(毫秒) 462 181 657 731 47489 mvel>ognl>spel>jexl>groovy

OGNL表达式

  • 依赖
<!-- https://mvnrepository.com/artifact/ognl/ognl -->
<dependency>
    <groupId>ognl</groupId>
    <artifactId>ognl</artifactId>
    <version>3.2.21</version>
</dependency>

  • 示例
import ognl.Ognl;
import ognl.OgnlException;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

public class ExpressionTest {
	@Test
    public void ognlExpression() throws OgnlException {
        String expressionString = "name.equals('李思')";
        String expressionString2 = "age + 2";
        Map map = new HashMap();
        map.put("name", "李思");
        map.put("age", 18);

        Object expression = Ognl.parseExpression(expressionString);
        Boolean resultBoolean = (Boolean) Ognl.getValue(expression, map);
        Integer resultString = (Integer) Ognl.getValue(expressionString2, map);
        System.out.println("OGNL:" + resultBoolean);
        System.out.println("OGNL:" + resultString);
    }
}
输出:
	OGNL:true
	OGNL:20

MVEL表达式

  • 依赖
<!-- https://mvnrepository.com/artifact/org.mvel/mvel -->
<dependency>
    <groupId>org.mvel</groupId>
    <artifactId>mvel</artifactId>
    <version>2.0beta1</version>
</dependency>

  • 示例
import org.junit.Test;
import org.mvel.MVEL;

import java.util.HashMap;
import java.util.Map;

public class ExpressionTest {
	@Test
    public void mvelExpression(){
        String expressionString = "name.equals('李思')";
        String expressionString2 = "age + 2";
        Map map = new HashMap();
        map.put("name", "李思");
        map.put("age", 18);

        Boolean resultBoolean = MVEL.evalToBoolean(expressionString, map);
        Integer resultInteger = MVEL.eval(expressionString2, map, Integer.class);
        System.out.println("MVEL:" + resultBoolean);
        System.out.println("MVEL:" + resultInteger);
    }
}
输出:
	MVEL:true
	MVEL:20

SPEL表达式

  • 依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>5.3.16</version>
</dependency>

  • 示例
import org.junit.Test;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

import java.util.HashMap;
import java.util.Map;

public class ExpressionTest {
	@Test
    public void spelExpression(){
        String expressionString = "#name.equals('李思')";
        String expressionString2 = "#age + 2";
        EvaluationContext evaluationContext = new StandardEvaluationContext();
        evaluationContext.setVariable("name", "李思");
        evaluationContext.setVariable("age", 18);
        ExpressionParser expressionParser = new SpelExpressionParser();
        Boolean resultBoolean = expressionParser.parseExpression(expressionString).getValue(evaluationContext, Boolean.class);
        Integer resultInteger = expressionParser.parseExpression(expressionString2).getValue(evaluationContext, Integer.class);
        System.out.println("SPEL:" + resultBoolean);
        System.out.println("SPEL:" + resultInteger);
    }
}
输出:
    SPEL:true
	SPEL:思

Jxel表达式

  • 依赖
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-jexl3 -->
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-jexl3</artifactId>
	<version>3.1</version>
</dependency>

  • 示例
import org.apache.commons.jexl3.JexlBuilder;
import org.apache.commons.jexl3.JexlContext;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.MapContext;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

public class ExpressionTest {
@Test
    public void jexlExpression(){
        String expressionString = "name.equals('李思')";
        String expressionString2 = "age + 2";
        JexlContext jc = new MapContext();
        jc.set("name", "李思");
        jc.set("age", 18);

        JexlEngine jexl = new JexlBuilder().create();
        Boolean resultBoolean = (Boolean) jexl.createExpression(expressionString).evaluate(jc);
        Integer resultInteger = (Integer) jexl.createExpression(expressionString2).evaluate(jc);

        System.out.println("Jexl:" + resultBoolean);
        System.out.println("Jexl:" + resultInteger);
    }
}
输出:
    Jexl:true
    Jexl:20

Groovy表达式

  • 依赖
<!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy -->
<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>2.5.6</version>
</dependency>

  • 示例
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

public class ExpressionTest {
    @Test
    public void groovyExpression(){
        String expressionString = "name.equals('李思')";
        String expressionString2 = "age + 2";
        Binding binding = new Binding();
        binding.setVariable("name", "李思");
        binding.setVariable("age", 18);

        GroovyShell shell = new GroovyShell(binding);
        Boolean resultBoolean = (Boolean) shell.evaluate(expressionString);
        Integer resultInteger = (Integer) shell.evaluate(expressionString2);

        System.out.println("Groovy:" + resultBoolean);
        System.out.println("Groovy:" + resultInteger);
    }
}
输出:
    Jexl:true
    Jexl:20

标签:Java,name,util,引擎,李思,org,Test,import,表达式
From: https://www.cnblogs.com/gainer/p/17457934.html

相关文章

  • 【程序人生】Java Web 开发脚手架调研
    文章目录GiteeMostValueProject铭飞BootDoRuoYijeecg-bootrenren-fast调研时间2019.06.18GiteeMostValueProject铭飞/MCMS4.7.0bootdoruoyi3.4jeecg-bootrenren-fast托管仓库https://gitee.com/mingSoft/MCMShttps://gitee.com/lcg0124/bootdohttps://gitee.com/y_pro......
  • Java之基于注解的Excel导出
    数据库Excel导出操作代码过于冗长惨不忍睹,无法复用。【推荐使用阿里巴巴组件:关于Easyexcel|EasyExcel】目录第一步:自定义注解:第二步:实体类:第三步:解析工具类:第四步:使用:依赖:<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base<......
  • 传奇架设教程:传奇gee引擎微端架设教程
    首先下载GEEM2引擎包,解压出来,打开微端服务器文件夹,可以看到里面有两个文件夹一个是微端程序,一个是微端网关接下来,把微端程序文件里面的文件,复制到微端服务器里的热血传奇客户端里面,见下图然后运行updateserver.exe这个程序,等运行完后,看看里面是否加载到补丁文件如果都加载到你客户......
  • 【JAVA 8】 List 使用Lambda表达式操作对象字段进行升序、降序
    总结使用Lambda表达式轻松对集合进行排序1、需要排序的对象implementsComparable接口,并重写compareTo方法指明默认排序的字段2、使用java8的API轻松实现对List的排序代码中也涉及了一些java8的语法嘻嘻,对新语法我也不熟悉Mainpublicstaticvoidmain(String[]args){......
  • 【IDE】IntelliJ IDEA 插件之Alibaba Java Coding Guidelines - 阿里巴巴Java代码检测
    一、安装进入插件安装界面|-File |-Settings |-Plugins输入alibabainstallAlibabaJavaCodingGuidelines重启IDEA,开始使用二、使用编码规范扫描该插件在扫描代码后,将不符合《java开发手册》的代码按Blocker/Critical/Major三个等级进行显示在Snoar中对代码规则有五......
  • 【JAVA】集合、JUC包结构图
    发现Java基础还是不踏实,需要好好修炼一段时间,就从下面的三张图开始学习吧,加油!一、集合框架二、JUC包三、Socket......
  • 【JavaScript】想在JS中使用换行符,我该怎么操作呢?
    使用'\n'换行,而不是'\n'注意前后空格实战demo:$('#text').val('hello'+'\n'+'world');......
  • 【JavaFX】What is JavaFX ?
    HelloWorld示例说明使用JavaFXSceneBuilder的示例......
  • 【JavaScript】setTimeout 和 setInterval 小记
    项目setTimeoutsetInterval名称一次性定时器循环定时器相同在规定延迟时间再执行某个操作在规定延迟时间再执行某个操作区别只能定时一次可以一直循环执行下去......
  • 传奇开服架设教程--GeeM2与GomM2引擎通用假人脚本
    开新区注意事项:1、新区无任何玩家数据下可以运行“MirServer\假人行会初始化”目录下的“点我初始化假人行会.Bat”程序2、默认假人后台管理密码为:www.idc02.com假人修改说明:市面上的版本千变万化,不可能统一全部数据,以下就是可以随版本修改的自定义假人假人等级,装备修改路径:“Mir......