如何用字节小伙伴实现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 文件转换器,只需指定要进行的转换即可。
有没有办法用字节小伙伴实现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 文件转换器,只需指定要进行的转换即可。