有没有一种方法可以使用字节伙伴来实现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中。因此,我已经有了可用的“基础设施”。因此,我宁愿不安装另一个字节伙伴代理来解决此问题。
答案 0 :(得分:0)
是的,请查看AgentBuilder.Default。它提供了用于实现Java代理的DSL。您不需要使用它来实现自己的类文件转换器,只需指定要进行的转换即可。