如何检测java系统类?

我正在尝试向系统类添加自定义行为(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 #revoformClasses(Instrumentation#getAllLoadedClasses())之类的东西。 注意,您必须使用Instrumentation#addTransformer(ClassFileTransformer,true)来指示您的转换器支持重新转换类。