我正在尝试向系统类(FileInputStream/FileOutputStream)添加自定义行为。我使用以下转换方法编写了自定义 ClassFileTransformer:
public byte[] transform(ClassLoader arg0, String arg1, Class arg2, ProtectionDomain arg3, byte[] arg4) throws IllegalClassFormatException {
System.out.println("class name: " + arg1);
return arg4;
}
当我运行示例程序时:
public static void main(String[] args) throws Exception {
new FileOutputStream("file");
}
我看到没有系统类未传递给转换。
有什么办法可以修改系统类吗?预先感谢!
最佳答案
在调用 pre-main 方法并添加 ClassFileTransformer 之前,一些(不是全部)系统类已经加载。如果您也想转换这些类,则可以在添加 ClassFileTransformer 后调用类似 Instrumentation#retransformClasses(Instrumentation#getAllLoadedClasses()) 的内容。请注意,您必须使用 Instrumentation#addTransformer(ClassFileTransformer, true) 来指示您的转换器支持类的重新转换。
关于java - 如何检测java系统类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20931646/