我的Java类路径中有一个类com.mycompany.MyBadClass
。
我正在尝试使用javaagent
来检测JVM以交换MyBadClass
MyGoodClass
,这也是在类路径中。
public static class BugFixAgent {
public static void premain(String args, Instrumentation inst) {
inst.addClassFileTransformer(new ClassFileTransformer() {
@Override
public byte[] transform(ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer) {
if (className.equals("com/mycompany/MyBadClass")) {
return patchedClassAsByteArray; // <====== ??????
} else {
return null; // skips instrumentation for other classes
}
}
});
}
}
所以我的问题是:如何以编程方式从类路径加载byte array
com.mycompany.MyGoodClass
?
答案 0 :(得分:2)
您可以使用
获取InputStreamloader.getResourceAsStream(name + ".class");
然后可以将其转换为字节数组。
答案 1 :(得分:0)
你基本上想要
如果您的类路径只包含目录名称,那很容易 - 但是也许您的类位于某个JAR中,然后需要更多工作。
但正如所说:核心问题是最初的&#34;扫描&#34;。这是一个(有点)解决的问题,它只需要工作&#34;完成。