java - 如何检测java系统类?

标签 java instrumentation

我正在尝试向系统类(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/

相关文章:

android - 获取资源编号 0xffffffff 的名称时没有已知包

java - 我无法让 Google Maps Android API v2 工作 : GoogleMap cannot be resolved to a type

java - 检测 Java 类以创建反向 Java 调试器的最佳方法是什么?

java - 在我的项目包之外的类上使用asm(java字节码)类读取器?

android - "Window Manager Crash"在三星 Galaxy S 上发送 'Down' 键

java - 测试 onActivityResult()

java - 使用 UTF-16BE 的 JAXB 空元素过早结束文件

java - 为使用 JSch 通过 SSH 执行的命令提供输入/子命令

jvm - java编译时错误,由于从jdk7降级到jdk6

java - 制作按钮下方的布局