首页 > 其他分享 >SPEL、OGNL、Groovy、JEXL总结

SPEL、OGNL、Groovy、JEXL总结

时间:2023-05-15 21:23:17浏览次数:48  
标签:Groovy 框架 编译 SPEL JEXL OGNL 执行 表达式

 

一、SPEL

官网地址:https://docs.spring.io/spring-framework/reference/core/expressions.html

1、支持编译,大大提升编译效率,需要在创建的时候指定,但是有如下编译限制:

从 Spring Framework 4.1 开始,基本的编译框架已经到位。但是,该框架还不支持编译每一种表达式。最初的重点是可能在性能关键上下文中使用的常见表达式。目前无法编译以下几种表达式:

  • 涉及赋值的表达式

  • 依赖转换服务的表达式

  • 使用自定义解析器或访问器的表达式

  • 使用选择或投影的表达式

将来会编译更多类型的表达式。

 

 

二、OGNL

官网地址:https://commons.apache.org/proper/commons-ognl/language-guide.html

1、OGNL(Object-Graph Navigation Language)是一种表达式语言,用于在Java应用程序中对对象图进行导航和操作。OGNL本身并不提供直接的执行环境,它是作为一个库或框架的一部分来使用的。因此,OGNL的执行方式取决于使用它的上下文。

一般情况下,OGNL可以通过两种方式执行:解释执行和编译执行。

  1. 解释执行:在解释执行中,OGNL表达式在运行时逐条解释和执行。它会在每次表达式执行时动态计算表达式的结果,并根据对象图的实际状态进行导航和操作。这种方式的灵活性较高,可以根据需要对对象图进行动态操作,但相对而言执行效率较低。

  2. 编译执行:为了提高执行效率,有些框架会将OGNL表达式编译成可执行的字节码或类文件。在编译执行中,OGNL表达式在编译阶段被转换成可执行代码,然后在运行时直接执行这些生成的代码。这种方式可以在一定程度上提高执行速度,但牺牲了一些灵活性,因为编译后的代码在运行时不再动态计算。

需要注意的是,OGNL本身并没有定义具体的执行方式,而是依赖于使用它的框架或库的实现。不同的框架可能采用不同的执行策略,甚至可以在运行时根据需求进行切换。因此,要确定OGNL的执行方式,需要查看具体的框架或库的文档和实现。

 

三、Groovy

官网地址:http://www.groovy-lang.org/documentation.html

1、

 

四、JEXL

官网地址:https://commons.apache.org/proper/commons-jexl

1、JEXL(Java Expression Language)是一种基于Java的表达式语言,主要用于在Java应用程序中进行动态表达式的解析和执行。JEXL通常采用解释执行的方式。

在JEXL中,表达式被解析为抽象语法树(AST),然后通过遍历和解释AST来执行表达式。每次执行表达式时,JEXL会动态计算表达式的结果,并根据对象图的实际状态进行导航和操作。

虽然JEXL本身没有提供编译执行的功能,但你可以结合其他工具或框架来实现对JEXL表达式的编译执行。例如,你可以使用动态编译技术将JEXL表达式编译成可执行的字节码,然后在运行时直接执行生成的字节码。这样做可以提高执行效率,但需要在编译和执行之间进行额外的转换步骤。

需要注意的是,JEXL的设计目标是提供一种简单且易于使用的表达式语言,重点在于灵活性和动态性,而不是执行效率。因此,JEXL通常使用解释执行来满足这些设计目标。

总结而言,JEXL通常采用解释执行的方式,将表达式解析为抽象语法树,并在运行时逐条解释和执行。但你可以通过其他技术来实现对JEXL表达式的编译执行,以提高执行效率。具体的实现方式取决于你所使用的工具和框架。

 

 

标签:Groovy,框架,编译,SPEL,JEXL,OGNL,执行,表达式
From: https://www.cnblogs.com/wanghengbin/p/17403163.html

相关文章

  • mac版DataSpell2023:专业数据科学家的 IDE,macbook程序员必备
    DataSpell2023forMac是一款强大的数据科学工具,它提供了广泛的功能和工具,帮助用户更好地分析、处理和可视化数据。无论是数据分析师、数据科学家、商业分析师还是研究人员,DataSpellforMac都是一个理想的选择。mac软件下载:https://mac.macsc.com/mac/4116.html?id=MzI1OTY2......
  • mybatis之OGNL表达式
    对象导航图语言(ObjectGraphNavigationLanguage),简称OGNL,是应用于Java中的一个开源的表达式语言(ExpressionLanguage)这里制作简单的了解,知道是什么。OGNL表达式OGNL常用表达式e1ore2e1ande2e1==e2,e1eqe2e1!=e2,e1neqe2e1<e2,e1lte2e1<=e2,e1l......
  • PAT Advanced 1005. Spell It Right
    PATAdvanced1005.SpellItRight1.ProblemDescription:Givenanon-negativeinteger \(N\),yourtaskistocomputethesumofallthedigitsof \(N\),andoutputeverydigitofthesuminEnglish.2.InputSpecification:Eachinputfilecontainson......
  • 菜鸟记录:c语言实现PAT甲级1005--Spell It Right
     非常简单的一题了,但还是交了两三次,原因:对数组的理解不足;对数字和字符之间的转换不够敏感。这将在下文中细说。Givenanon-negativeinteger N,yourtaskistocomputethesumofallthedigitsof N,andoutputeverydigitofthesuminEnglish.InputSpecificatio......
  • OGNL表达式语言介绍
    OGNL表达式语言介绍[code]OGNL介绍OGNL是Object-GraphNavigationLanguage的缩写,它是一种功能强大的表达式语言(ExpressionLanguage,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等......
  • 精通struts2的ognl表达式
    精通struts2的ognl表达式[code]Struts2中内置了OGNL表达式的支持,使得Struts2的具有比Struts1更为强大的数据访问的功能。本文主要讲解OGNL的使用方法,并不会去讲解一些原理性的东西,想要了解的朋友可以自己去查阅相关的资料在OGNL的使用主要分以下部分来......
  • 实现声明式锁,支持分布式锁自定义锁、SpEL和结合事务
    目录2.实现2.1定义注解2.2定义锁接口2.3锁的实现2.3.1什么是SPI2.3.2通过SPI实现锁的多个实现类2.3.3通过SPI自定义实现锁3.定义切面3.1切面实现3.2SpEL表达式获取动态key3.3锁与事务的结合4.测试4.1ReentrantLock测试4.2RedissonClient测试4.3自定义锁测试5.尾声5.1......
  • Groovy def关键字妙用
    在之前的文章和视频中,我分享过Groovy语法中def关键字的基本使用方法。当时对def理解是:不定类型变量,资料中也有说是无类型变量,感觉两个意思大差不差,就是不显式声明对象类型。基本使用方式如下:defa=1defb="FunTester"类似这样的方式,当时Java新版也已经支持了var可以替代一......
  • groovy环境搭建
    1、配置Groovy开发环境    由于Groovy是基于JDK的,所以安装Groovy之前肯定要安装JDK了,从http://www.oracle.com/technetwork/java/javase/downloads/index.html可以下载到最新的JDK,写这篇文章时,JDK已经更新到JDK7u2了,下载安装包安装即可。Groovy的安装挺简单的,基本上和JDK的......
  • Groovy教程
    基础语法1.输出字符串println(“HelloWorld”);2.定义变量defstudent='aaa'3.关键字关键字含义as强制类型转换assert断言break跳出循环caseswitch语句中的分支catch捕获异常class定义类const常量continue继续循环def......