我正在使用bytebuddy在测试中插入方法调用。我遇到了这个问题:
- 代理错误:java.lang.AbstractMethodError:接收器类nz.ac.wgtn.nullannoinference.agent.NullLoggerAgent$4没有定义或继承解析的方法抽象转换(Lnet/bytebuddy/dynamic/DynamicType$Builder;Lnet/字节伙伴/描述/类型/类型描述;语言/类加载器;Lnet/字节伙伴/实用程序/Java模块;Ljava/安全/保护域;)Lnet/字节伙伴/动态/动态类型$生成器;接口net.bytebuddy.agent.builder.代理构建器$Transformer.*
关键问题是ProtectionDomain
类型的AgentBuilder$Transformer::transform
的最后一个参数。在版本1.10.20中,这是abscent。我可以升级,但这并不能解决我的问题,因为我无法控制正在使用的bytebuddy的版本,因为我想检测的许多程序已经通过mockito具有bytebuddy依赖性,通常是稍微旧的版本。
也许阴影可以起作用。有什么建议吗?我总是可以为不同版本的bytebuddy编写多个版本的代理,但这似乎非常笨拙,而且是一场维护噩梦。
1条答案
按热度按时间bnlyeluc1#
我想我已经弄明白了--实际上这相当容易,我太习惯于lambdas了,以至于我没有看到明显的东西。
也就是说,只需重载
transform
以支持两个API版本。