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

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

阅读更多

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

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

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

分享到:
评论

相关推荐

    ognl源代码以及api文档

    1. **表达式语法**:ognl表达式由对象路径和操作组成,如`object.property`或`array[index]`,可以进行属性访问、方法调用、算术运算和逻辑判断等。 2. **变量上下文**:ognl在执行时会使用一个变量上下文,其中...

    ognl-2.7.3-src

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

    OGNL表达式的使用及文档

    4. **方法调用**:OGNL允许直接在表达式中调用方法,如`user.getEmail()`。 5. **运算符支持**:OGNL支持常规的算术、比较和逻辑运算符,如`+`, `-`, `*`, `/`, `%`, `>`, `, `==`, `&&`, `||`等。 二、OGNL进阶...

    ognl表达式 ognl表达式

    ### OGNL表达式的理解和应用 ...通过上述介绍可以看出,OGNL作为一种强大的表达式语言,在Struts2框架中扮演着非常重要的角色,不仅可以方便地访问和操作对象属性,还能有效地处理复杂的业务逻辑。

    struts标签和ognl语法

    此外,OGNL 还支持链式访问(如 `obj.property1.property2`)、方法调用(如 `obj.method()`)以及复杂的条件和逻辑运算。 ### jQuery 和 Ajax jQuery 是一个流行的 JavaScript 库,简化了 DOM 操作和 AJAX 请求。...

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

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

    OGNL语法 小资料

    根据OpenSymphony的OGNL官方文档,整理了下。简洁易懂

    ognl表达式java使用案例详解(测试通过)

    本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...

    ognl项目文件和源代码

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

    ognl源码及API

    在源码中,你可以看到ognl的实现细节,包括如何解析字符串表达式为抽象语法树(AST),然后通过这个树来执行操作。这涉及到词法分析、语法分析以及表达式求值等多个步骤。通过阅读源码,你可以了解OGNL是如何处理...

    ognl2.7.3源代码

    2. **动态方法调用**:除了属性访问,OGNL还能调用对象的方法,如`list.sort()`,甚至可以动态地决定调用哪个方法,如`obj["get" + name]()`。 3. **表达式计算**:OGNL支持数学运算、逻辑运算以及条件表达式,例如...

    ognl源码

    通过阅读和研究OGNL源码,开发者不仅能了解其内部工作流程,还能更好地应对实际开发中的问题,比如调试OGNL表达式、防止代码注入攻击、优化性能等。对于使用Struts2或其他依赖OGNL的框架的开发者来说,这是一项重要...

    ognl-2.6.11的源代码

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

    ognl2.6.11 源代码

    5. **查看OGNL与Java反射API的交互**:OGNL利用反射API来动态调用对象的方法和访问属性,这对于学习Java反射和动态类型编程很有价值。 6. **理解OGNL与各种框架的集成**:虽然OGNL是一个独立的库,但它常与其他框架...

    struts2.0中的ognl

    OGNL,全称为Object-Graph Navigation Language,是一种强大的、动态的、类型安全的表达式语言,允许程序开发者通过简单的字符串表达式来访问和操作复杂的对象图。它的主要功能包括访问对象的属性、调用方法、执行...

    OGNL语言中文资料

    OGNL,全称为Object-Graph Navigation Language,是一种强大的表达式语言,主要被用于获取和设置Java对象的属性。它在Java开发中广泛应用于Spring框架、Struts2等,提供了简洁而灵活的方式来访问和操作对象的属性。...

    ognl源码.rar

    2. **自省(Introspection)**:通过Java反射API,OGNL能动态查找和调用对象的方法,以及读写属性。 3. **列表和映射访问**:支持数组、列表、集合和映射的直接访问,例如`list[0]`或`map['key']`。 4. **方法调用...

    OGNL中文版详细文档

    3. 语法 4. 表达式 常数 属性引用 索引 数组(Array)与列表(List)的索引 JavaBean中的索引属性(Indexed Properties) OGNL特有的对象索引属性(Object Indexed Properties) 调用方法 变量引用 带括号的表达式...

Global site tag (gtag.js) - Google Analytics