【发布时间】:2012-02-10 21:28:16
【问题描述】:
我正在使用 AspectJ 来跟踪对图形类的调用。 到目前为止,我已经使用了一组预先编织的 javax.swing.* 类,并在加载时告诉 JVM 使用这些编织的类,而不是使用 -Xbootclasspath/p 开关来自 JRE 的类。
我想切换到加载时间编织模式。 任何人都可以帮助我如何在加载时间编织 javax.swing。我已经搜索了网络,但我仍然无法弄清楚如何去做。我知道默认情况下,AspectJ 加载时间编织器不会编织 java.* 和 javax.* 类。有人建议使用
-Xset:weaveJavaPackages=true,weaveJavaxPackages=true
在 aop.xml 中,但这些都没有帮助,因为 javax.swing 类是在 weaver 连接到类加载器之前加载的。我猜编织者根本看不到这些类。
如何管理动态编织 javax.swing 类?我应该实现一个自定义类加载器,首先注册一个编织器然后加载类吗?
有人可以提出任何解决方案吗?
【问题讨论】:
-
我没有给你一个好的答案,只是因为你说的原因,编织 java 和 javax 类非常棘手(它们是在加载编织器之前加载的。自定义类加载器可能帮助,但不能保证。如果可能的话,我会坚持编译时间编织。
-
确实,在加载时间 java 引导类上似乎很难编织。我听说有些人为此实现使用了自定义编织器,但没有人分享任何关于如何做到这一点的规范。
-
我同意上述 cmets 的观点,即这将很难做到。也许如果您告诉我们您为什么要这样做(即您的真正问题是什么),我们可以为您提供编织之外的替代方案。
-
正如 Adrew 所说,这很棘手,因为这是一个母鸡与鸡蛋的问题:您需要先加载运行时环境,然后才能运行任何 Java 程序(例如编织代理),但是您需要编织代理来检测一些 JDK/JRE 类。如果您发布一些示例代码 - 最好是 SSCCE - 我想研究一下并尝试一下。