我的目标是在运行时不需要特别知道类文件的位置就能够访问表示字节码的byte[]。
我已经尝试了两种解决方案,其中一种解决方案效果较好,但我想知道是否有其他方法可以实现这个目标(或者第二种解决方案哪里出了问题,导致无法工作)。
我的第一种(稍微)成功的解决方案是使用java.lang.instrumentation ClassFileTransformer类来访问类的byte[]。尽管这个方案有效,但我认为一定还有更简单的方法来实现这个目标。
我的第二种解决方案是使用-Xbootclasspath JVM参数替换java.lang.ClassLoader,并使其具有访问加载类的byte[]的能力。我添加了一个简单的System.out.println调试消息来确认ClassLoader的覆盖正在工作,但它没有起作用。我从这篇论文中得到了这个想法。我的类与链接的论文中重新制作的Integer类类似。我还使用了类似的目录设置,以便使用JVM参数,看起来像这样:
我已经尝试了两种解决方案,其中一种解决方案效果较好,但我想知道是否有其他方法可以实现这个目标(或者第二种解决方案哪里出了问题,导致无法工作)。
我的第一种(稍微)成功的解决方案是使用java.lang.instrumentation ClassFileTransformer类来访问类的byte[]。尽管这个方案有效,但我认为一定还有更简单的方法来实现这个目标。
我的第二种解决方案是使用-Xbootclasspath JVM参数替换java.lang.ClassLoader,并使其具有访问加载类的byte[]的能力。我添加了一个简单的System.out.println调试消息来确认ClassLoader的覆盖正在工作,但它没有起作用。我从这篇论文中得到了这个想法。我的类与链接的论文中重新制作的Integer类类似。我还使用了类似的目录设置,以便使用JVM参数,看起来像这样:
java -Xbootclasspath/p:.\out\production\boot\java\lang TestLoader
我的想法是,使用我提供链接中的方法,ClassLoader类是不能被覆盖的。
我很想知道为什么我的尝试覆盖ClassLoader没有成功,并且想听听还有什么其他方法可以访问类的byte[]。