`
jjw
  • 浏览: 65829 次
文章分类
社区版块
存档分类
最新评论

为什么OGNL语法不能通过编译字节码改成非反射调用

阅读更多

1. 为什么OGNL语法不能通过编译字节码改成非反射调用,比如利用asm进行编译?

     velocity在取对象数据的时候是反射调用的,会比较消耗性能,我总想通过字节码编译来达到不进行反射调用。但是这个情况其实是有bug的。

     因为类似"group.user.name"这种写法并没有什么对象的类型是什么,如果改成java的写法,则是((Group)group).getUser().getName();类似这样,但是因为Group对象可能会发生变化,如第一次是ExtendGroup,第二次是MainGroup,这样你不知道编译成ExtendGroup还是编译成MainGroup。所以如果要通用,则必须采用反射调用。

分享到:
评论

相关推荐

    ognl-2.7.3-src

    这部分源码展示了如何生成高效的字节码,以避免反射调用的性能损失。 5. **解释器(Evaluator)** 解释器处理编译后的 AST,并根据 AST 执行实际的操作,如获取或设置对象的属性、调用方法等。这部分源码包含了 ...

    ognl源代码(可以省去不少麻烦)

    4. **表达式编译与执行**:源码中包含了编译表达式为字节码的机制,提高了运行时的性能。执行阶段会根据AST遍历并执行相应的操作。 5. **类型转换**:OGNL能自动处理类型转换,使得不同类型的值之间可以方便地进行...

    ognl项目文件和源代码

    2. **Compiler**: 将AST编译成Java字节码,以提高性能。 3. **Runtime**: 包含了OGNL表达式的执行逻辑,如上下文管理、类型转换、属性访问等。 **学习资源** 要充分利用这个项目文件,你可以: - 在Eclipse中导入...

    ognl-2.6.11的源代码

    为了提高性能,OGNL可能实现了表达式的缓存和编译,将表达式转换为更高效的字节码。这部分源码会涉及到`ExpressionCache`和编译器相关组件。 10. **测试和示例**: 源代码包通常会包含单元测试和示例代码,这些...

    java动态特性eval

    通过这个接口,我们可以先将字符串转换为Java源代码,然后编译成字节码,最后通过`ClassLoader`加载并执行。这种方式可以实现动态编译和执行Java代码,但它需要处理语法解析、异常处理和类型检查等复杂问题。 4. **...

    高速 Fel表达式引擎

    - **编译模块**: Java源代码进一步编译为字节码,提高执行效率。 - **模块化设计**: Fel的各个组件(如函数库、编译器等)都支持替换或扩展,便于定制化开发。 #### 五、示例代码分析 - **算术表达式计算**: ```...

    freemaker+struts2

    5. **性能优势**:FreeMarker 生成的输出接近静态 HTML 的速度,因为模板在首次加载后会被编译为 Java 字节码,提高了执行效率。 **Struts2 知识点:** 1. **Struts2 是一个开源的 MVC 框架**:它提供了一种结构化...

Global site tag (gtag.js) - Google Analytics