【问题标题】:Can aspectj add methods to java.lang.String可以aspectj给java.lang.String添加方法吗
【发布时间】:2011-07-02 15:46:30
【问题描述】:

我看过aspectj的一些文章,我知道它可以增强类,这很有吸引力。我有一个非常愚蠢的问题,我找不到明确的答案:

aspectj可以给java.lang.String添加方法吗?

或类似的问题:如果我无法获得某些类的来源,我可以通过 aspectj 来增强它们吗?

【问题讨论】:

    标签: java aop aspectj


    【解决方案1】:

    我只是在寻找其他东西,偶然发现了这个问题。我想指出,Kowser 的回答即使被接受,也有些不正确。该问题提到对 LTW 没有限制,因此 CTW 仍在竞争中。可以编织 JDK/JRE 类文件,然后在后续步骤中将建议的类添加到引导类路径中。我以前做过(甚至完全是要求的,即在 String 中声明一个新方法),并且没有问题。

    【讨论】:

      【解决方案2】:

      不,我的朋友,你不能这样做。

      我想这就是你要找的Type not exposed to user

      更多详情请关注The AspectJ Development Environment Guide #Special Cases

      正如它所说的

      无论使用什么 aop.xml 文件,以下类都不会暴露给 LTW 基础架构

      • 所有 org.aspectj.* 类(和子包) - 基础设施本身需要这些类
      • 所有 java.* 和 javax.* 类(和子包)
      • 所有 sun.reflect.* 类 - 因为这些是发生反射调用时使用的 JDK 特定类

      【讨论】:

      • 此答案仅适用于 LTW。
      【解决方案3】:

      我绝不是 aspectj 方面的专家,但我相信这两件事你都可以做到。

      为一个类添加方法,甚至让它实现一个新接口并通过一个方面提供实现,我想你想要inter-type declarations

      AspectJ 通过字节码操作完成其工作,因此您无需访问您正在更改的类的源代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-28
        • 1970-01-01
        • 2015-11-29
        • 2016-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多