java - 如何从类路径 * 作为字节数组 * 加载 Java 类以进行字节码注入(inject)?

标签 java classloader bytecode instrumentation javaagents

我的 Java 类路径中有一个类 com.mycompany.MyBadClass

我正在尝试使用 javaagent 来检测 JVM,以将 MyBadClass 替换为 MyGoodClass,后者也在类路径中。

public static class BugFixAgent {
  public static void premain(String args, Instrumentation inst) {
    inst.addClassFileTransformer(new ClassFileTransformer() {
      @Override
      public byte[] transform(ClassLoader loader, 
                              String className, 
                              Class<?> classBeingRedefined, 
                              ProtectionDomain protectionDomain, 
                              byte[] classfileBuffer) {
        if (className.equals("com/mycompany/MyBadClass")) {
          return patchedClassAsByteArray; // <====== ??????
        } else {
          return null; // skips instrumentation for other classes
        }
      }
    });
  }
}

所以我的问题是:如何以编程方式从类路径加载 com.mycompany.MyGoodClass字节数组

最佳答案

你可以通过以下方式获取InputStream

loader.getResourceAsStream(name + ".class");

然后可以将其转换为字节数组。

关于java - 如何从类路径 * 作为字节数组 * 加载 Java 类以进行字节码注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647709/

相关文章:

Tomcat 错误 - Grails 应用程序 - NoClassDefFoundError

java - 如何从android中的另一个应用程序加载类

java - 通过排除 Java 中的某些字符串来替换字符串

java - 使用 ionic 构建的混合应用程序在 android 上崩溃但在 ios 上不崩溃

java - 在运行时扫描Java注释

java - 使用 BCEL 在现有方法中注入(inject)代码

php - HHVM 可以从权威 repo 中恢复源代码吗?

generics - GroovyAST 在编译时添加通用字段

java - 过滤后的 JTable 正确行号

java - 如何避免 OutOfMemoryError 上传文件?