【问题标题】:How can I generate multiple public classes for one class file in java using java agentjava - 如何使用java代理为java中的一个类文件生成多个公共类
【发布时间】:2017-02-21 03:01:17
【问题描述】:

我正在使用 java 代理基于 java 中的一个输入类文件为两个公共类生成字节码。

现在我已经在 ClassFileTransformer 的子类中的转换函数中获得了两个字节数组,其中包含生成的类的字节码。如何直接将它们加载到 JVM 中而不将它们保存到磁盘文件?

代码如下所示

public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, 
    ProtectionDomain protectionDomain, byte[] classfileBuffer)
throws IllegalClassFormatException {
    byte[] classOne = generateEhancedClass(className, classFileBuffer, loader);
    byte[] classTwo = generateShadowClass(className, classFileBuffer,loader);

    // TODO load both classOne and classTwo into loader

}

【问题讨论】:

    标签: java classloader javaagents


    【解决方案1】:

    你不能没有技巧。由于您有可用的ClassLoader,您可以直接调用defineClass 方法。然而,这确实需要反射,并且在 Java 9 中如果不显式导出 java.lang 包就不再可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      相关资源
      最近更新 更多