我已经阅读了一些关于aspectj的文章,我知道它可以增强类,这很有吸引力。我有一个非常愚蠢的问题,我找不到一个明确的答案:
可以将aspectj添加到java.lang.String吗?
或类似的问题:如果我无法获得某些类的来源,我可以通过aspectj来增强它们吗?
答案 0 :(得分:8)
我只是在寻找别的东西,偶然发现了这个问题。我想指出,即使被接受,但Kowser的答案有些不正确。问题提到对LTW没有限制,因此CTW仍处于竞争中。可以编织JDK / JRE类文件,然后在稍后的步骤中将建议的类前置到引导类路径中。我之前已经完成了(甚至完全是被要求的,即在String中声明一个新方法),它没有问题。
答案 1 :(得分:6)
不,你不能这样做我的朋友。
我认为这就是你要找的Type not exposed to user
有关详细信息,请查看The AspectJ Development Environment Guide #Special Cases
正如它所说
无论使用的aop.xml文件是什么,以下类都不会暴露给LTW基础结构
答案 2 :(得分:4)
我不是facej的专家,但我相信你可以做这两件事。
要向一个类添加方法,或者甚至让它实现一个新的接口并通过一个方面提供实现,我想你想要inter-type declarations。
AspectJ通过字节码操作来完成它的工作,所以你不需要访问你正在改变的类的源。