一、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可以通过两种方式执行:解释执行和编译执行。
-
解释执行:在解释执行中,OGNL表达式在运行时逐条解释和执行。它会在每次表达式执行时动态计算表达式的结果,并根据对象图的实际状态进行导航和操作。这种方式的灵活性较高,可以根据需要对对象图进行动态操作,但相对而言执行效率较低。
-
编译执行:为了提高执行效率,有些框架会将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