如何使用字节伙伴实现ClassFileTransformer#transform?

时间:2019-05-20 14:59:03

标签: byte-buddy

有没有一种方法可以使用字节伙伴来实现ClassFileTransformer#transform? 目前,我的实现使用javassist,但由于具有更好的泛型支持,我想用字节伙伴替换它。

到目前为止,我的实现看起来像这样:

public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
  ProtectionDomain protectionDomain, byte[] classfileBuffer)
{
  if (className.startsWith("my.package."))
  {
    try {
      final CtClass ctClass = classPool.makeClass(new ByteArrayInputStream(classfileBuffer));
      /* class manipulation */
      return ctClass.toBytecode();

      // remove class from class pool if it hasn't been modified
      ctClass.detach();
    } catch(final Exception ex) {
      logger.error("failed to analyse/transform class {}", className, ex);
    }
  }

  return classfileBuffer;
}

字节伙伴可能有类似的可能吗?有没有办法用参数classfileBuffer中提供的字节码来喂字节伙伴?

ClassFileTransformer实现已配置到Spring Load Time Weaver中。因此,我已经有了可用的“基础设施”。因此,我宁愿不安装另一个字节伙伴代理来解决此问题。

1 个答案:

答案 0 :(得分:0)

是的,请查看AgentBuilder.Default。它提供了用于实现Java代理的DSL。您不需要使用它来实现自己的类文件转换器,只需指定要进行的转换即可。