【发布时间】:2011-07-02 15:46:30
【问题描述】:
我看过aspectj的一些文章,我知道它可以增强类,这很有吸引力。我有一个非常愚蠢的问题,我找不到明确的答案:
aspectj可以给java.lang.String添加方法吗?
或类似的问题:如果我无法获得某些类的来源,我可以通过 aspectj 来增强它们吗?
【问题讨论】:
我看过aspectj的一些文章,我知道它可以增强类,这很有吸引力。我有一个非常愚蠢的问题,我找不到明确的答案:
aspectj可以给java.lang.String添加方法吗?
或类似的问题:如果我无法获得某些类的来源,我可以通过 aspectj 来增强它们吗?
【问题讨论】:
我只是在寻找其他东西,偶然发现了这个问题。我想指出,Kowser 的回答即使被接受,也有些不正确。该问题提到对 LTW 没有限制,因此 CTW 仍在竞争中。可以编织 JDK/JRE 类文件,然后在后续步骤中将建议的类添加到引导类路径中。我以前做过(甚至完全是要求的,即在 String 中声明一个新方法),并且没有问题。
【讨论】:
不,我的朋友,你不能这样做。
我想这就是你要找的Type not exposed to user
更多详情请关注The AspectJ Development Environment Guide #Special Cases
正如它所说的
无论使用什么 aop.xml 文件,以下类都不会暴露给 LTW 基础架构
【讨论】:
我绝不是 aspectj 方面的专家,但我相信这两件事你都可以做到。
为一个类添加方法,甚至让它实现一个新接口并通过一个方面提供实现,我想你想要inter-type declarations。
AspectJ 通过字节码操作完成其工作,因此您无需访问您正在更改的类的源代码。
【讨论】: