如何插入java系统类?

如何插入java系统类?,java,instrumentation,Java,Instrumentation,我正在尝试向系统类(FileInputStream/FileOutputStream)添加自定义行为。我使用以下转换方法编写了自定义ClassFileTransformer: public byte[] transform(ClassLoader arg0, String arg1, Class arg2, ProtectionDomain arg3, byte[] arg4) throws IllegalClassFormatException { System.out.println

我正在尝试向系统类(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");
}
我发现没有系统类不被传递给transform


有没有办法修改系统类?提前谢谢

在调用pre-main方法并添加ClassFileTransformer之前,已经加载了一些(不是全部)系统类。如果还想转换这些类,可以在添加ClassFileTransformer后调用类似于Instrumentation#retransformClasses(Instrumentation#getAllLoadedClasses())的东西。注意,您必须使用Instrumentation#addTransformer(ClassFileTransformer,true)来指示您的转换器支持类的重新转换。

我希望系统类能够被传递,因为许多工具(如探查器)都依赖于此行为。可以添加几个ClassFileTransformer以避免许多工具出现问题。还有关于如何转换类的标准/指南/建议请注意,应该检查类是否可修改:Instrumentation.isModifiableThank@jarnbjo,我正在寻找类似的东西-