byte-buddy - 如何使用字节伙伴实现 ClassFileTransformer#transform?
问题描述
有没有办法使用字节伙伴来实现 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 中。所以我已经有了可用的“基础设施”。因此我宁愿不安装另一个字节伙伴代理来解决这个问题。
解决方案
是的,请查看 AgentBuilder.Default。它提供了一个用于实现 Java 代理的 DSL。您不需要使用它来实现自己的类文件转换器,只需指定要进行的转换即可。
推荐阅读
- python - 在 tkinter 应用程序中创建和分配多个变量
- react-admin - 有没有办法从网址中删除锚标签?
- excel - Excel PowerQuery - 使用超过 260 个字符的单元格引用错误
- rest - SPLUNK 多值图表
- javascript - 使用 select2 时如何删除 Materialize 的选择下拉菜单?
- graph - 使用 Soot 的函数图
- c++ - 为什么移动构造不从祖父母继承
- ios - 在 swift 上的入职流程结束时显示按钮
- visual-studio-code - 没有用于包装在 VS Code 中的 Flutter Widget 菜单
- eclipse - Eclipse AWS 工具包中未解析 Rekognition 命名空间