我想拦截ClassLoader的loadClass方法。为了显示ClassLoader加载类的过程。但我不知道aspectj的工作原理。它可以修改JDK的源代码吗?
答案 0 :(得分:1)
您可以使用调试器并逐步完成该过程以理解它。
AspectJ可以在编译(CTW,编译时编织)或类加载(LTW,加载时编织)期间将方面编织到现有的类文件中。
LTW不适用于JDK类,因为这些类总是在编织代理之前加载。所以你在那里遇到了引导问题。
然而,您可以做的是将CTW应用于例如来自您的JRE / JDK发行版的rt.jar
,将编织的类文件压缩到另一个JAR中,并用它替换原始的JAR。然后,如果在引导类路径上使用aspectjrt.jar
启动JVM,则会看到实际的方面。我之前已经这样做了并且它有效。但实际上,这不是AspectJ的设计目标。但你问,所以我告诉你。这是一个非常高级的主题,我怀疑这是你作为一个完整的AspectJ新手应该采取的道路 - 没有冒犯意味着。
更新因为我经常被问到这个问题,所以我创建了一个小demo project来展示如何将方面编织到JRE / JDK中。我仍然认为在正常情况下使用它是不合理的,但是到底是什么:为什么人们登上珠穆朗玛峰?因为它存在。 ; - )