可以将aspectj添加到java.lang.String中

时间:2011-07-02 15:46:30

标签: java aspectj

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

可以将aspectj添加到java.lang.String吗?

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

3 个答案:

答案 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基础结构

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

答案 2 :(得分:4)

我不是facej的专家,但我相信你可以做这两件事。

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

AspectJ通过字节码操作来完成它的工作,所以你不需要访问你正在改变的类的源。