OGNL表达式解析与编译

时间:2013-06-27 07:07:43

标签: java ognl

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

在咨询API时,我还注意到有compileExpression方法:

在彻底搜索有关编译与解析的信息之后,the only article I could find是Struts文档的一部分,并提到了如何执行此操作,但没有提到它与解析相比的功能。

在什么条件下你应该使用编译而不是单独解析,与简单地解析相同的表达式相比,编译表达式是否有显着的性能优势?

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

1 个答案:

答案 0 :(得分:2)

那个http://struts.apache.org/release/2.3.x/docs/ognl-expression-compilation.html链接已经过时了,我不确定它是否过时,但它是我写过的关于如何使用javassist的唯一真实文档 - 基于表达式的JIT代码。

如果您使用ognl直接或间接使用某些内容会显示该区域的效果,那么这只是一个相关问题。正常的表达式评估机制可能已经足以满足大多数需求,但是这个额外的步骤将基本上是调用调用的java反射链转换为纯Java等价物,因此它几乎完全消除了由于反射而使用OGNL可能产生的任何打击。

真的,如果你不确定你是否需要它,你可能不会。对不起,我没有把这个概念彻底地整合到OGNL中,而没有那么多可怕的额外工作。可能在OGNL中作为可选配置设置最好被关闭或打开但是......如果你愿意,可以随意在github上分叉。 =)