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

How to implement ClassFileTransformer#transform with byte buddy?

有没有办法用字节小伙伴实现ClassFileTransformer#transform? 目前我的实现使用 javassist,但我想用 byte buddy 替换它,因为它有更好的泛型支持。

到目前为止我的实现是这样的:

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;
}

byte buddy 可以做类似的事情吗?有没有办法将参数 classfileBuffer 中提供的字节码提供给字节好友?

ClassFileTransformer 实现被配置到 Spring 加载时间编织器中。所以我已经有了可用的 "infrastructure"。所以我宁愿不安装另一个字节好友代理来解决这个问题。

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