Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OGNL表达式解析与编译_Java_Ognl - Fatal编程技术网

Java OGNL表达式解析与编译

Java OGNL表达式解析与编译,java,ognl,Java,Ognl,在OGNL中,建议解析重用的表达式以提高性能 在查阅API时,我还注意到有一种方法: 在彻底搜索了有关编译和解析的信息之后,本文是Struts文档的一部分,并提到了如何做,但没有提到与解析相比它做了什么 在什么情况下应该使用编译而不是单独解析,与简单解析同一表达式相比,编译表达式是否有显著的性能优势 从方法签名可以看出,Ognl.parseExpression()生成了一个与输入无关的对象,但Ognl.compileExpression()生成了一个依赖于给定输入(根和上下文)的对象。这是正确的

在OGNL中,建议解析重用的表达式以提高性能

在查阅API时,我还注意到有一种方法:

在彻底搜索了有关编译和解析的信息之后,本文是Struts文档的一部分,并提到了如何做,但没有提到与解析相比它做了什么

在什么情况下应该使用编译而不是单独解析,与简单解析同一表达式相比,编译表达式是否有显著的性能优势

从方法签名可以看出,Ognl.parseExpression()生成了一个与输入无关的对象,但Ognl.compileExpression()生成了一个依赖于给定输入(根和上下文)的对象。这是正确的吗?

该链接非常旧,我不确定它是否过时,但它是我编写的关于如何使用基于javassist的表达式JIT代码的唯一真实文档

只有当您自己直接或间接使用ognl使用某些东西时,在该领域表现出性能下降,这才是一个相关的问题。普通表达式求值机制可能足以满足大多数需求,但这一额外步骤将基本上是java反射调用链的调用转换为纯java等效调用,因此它几乎完全消除了使用OGNL时可能由于反射而产生的任何影响

真的,如果你不确定你是否需要它,你可能不需要。很抱歉,如果没有这么多看起来吓人的额外工作,我从来没有把这个概念完全集成到OGNL中。作为OGNL中的可选配置设置,最好关闭或打开,但。。如果您愿意,可以随意使用github

compileExpression()方法取决于根和上下文-这是否意味着返回的节点仅用于计算相同的输入?由于Ognl.parseExpression()似乎是独立于输入的,因此它似乎是一种可行的方法。这是正确的吗?如果你能将以上两个问题的答案纳入你的答案,我会给你一个神奇的记号。我会把我的问题修改得更清楚一点。感谢您对编译和解析时涉及的底层过程的清晰解释。compileExpression()应该与parseExpression()一样,在相同的数据“类型”上具有通用的wrt输入/输出