9

我正在尝试将自定义行为添加到系统类(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");
}

我看到没有系统类没有传递给转换。

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

4

1 回答 1

10

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

于 2010-11-29T10:41:33.450 回答