我需要在JDK Classes中添加字段。例如java.lang.String
首先我尝试了:
declare parents: ( * && !java.lang.Object ) implements VistaInt;
public String[] VistaInt.abc;
然而,这不起作用。
它会发出警告
this affected type is not exposed to the weaver:
org.aspectj.lang.Signature [Xlint:typeNotExposedToWeaver]
所以我在互联网上研究它,发现它看起来更难了 AspectJ不支持直接引入JDK类:
http://www.inf.usi.ch/faculty/binder/documents/pppj08.pdf
但是有人提出了一些callse FERRARI框架,AspectJ的工具应该允许注入JDK类。
所以我一直在寻找它并到达这里:
http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg02520.html
但这些链接都不起作用,我无法找到任何其他来源,工具或任何可以帮助我的东西。
你有什么想法,在哪里可以找到这个库,或者如何注入java JDK类型?
谢谢!
答案 0 :(得分:5)
首先,您需要找到Eclipse项目正在使用的rt.jar。这很可能是您机器的默认设置,但要检查您是否可以右键单击项目中的JRE系统库图标,单击“属性”和“已安装的JRE”。 rt.jar文件位于lib。
一旦拥有它,您将需要从命令行编织它(您可能需要下载单独的ajc编译器)。假设您想编织MyAspect.aj,您将运行
ajc -inpath rt.jar MyAspect.aj -outjar newrt.jar
然后,您需要确保代码使用此库,方法是将newrt.jar放在rt.jar之前的bootclasspath中。从命令行运行
java -Xbootclasspath/<path to newrt.jar> MyApplication
在Eclsipse中,您将-Xbootclasspath/<path to newrt.jar>
添加到“运行”配置。
但是,我不建议修改java.lang.String
,因为JVM经常特别对待这个类。但如果你愿意,你可以试一试:)
注意
我认为你所提到的FERRARI框架是针对LTW(加载时间编织)的,而这个讨论是针对CTW(编译时编织)解决方案的。如果您想要执行LTW,那么您将遇到困难,因为自定义类加载器无法加载java.*
类,因此您无法在加载时编织这些类。您的链接表明人们尝试了一种解决方法,但我对此一无所知。