我想重新定义已在现有框架中定义的Source类。我想用我的增强类自动替换Source类的原始实例。我无权访问创建Source对象的代码,因此类替换必须在引擎盖下自动执行。是否可以使用byte-buddy执行此操作?
ByteBuddyAgent.install();
Source source = new ByteBuddy()
.subclass(Source.class)
.method(named("hello")).intercept(MethodDelegation.to(Target.class))
.defineMethod("myNewMethod", void.class).intercept(MethodDelegation.to(Target.class))
.make()
.load(Source.class.getClassLoader(),
ClassReloadingStrategy.fromInstalledAgent())
.getLoaded()
.newInstance();
答案 0 :(得分:0)
可以使用Byte Buddy重新定义一个班级。为此,您将使用ByteBuddy::redefine
或ByteBuddy::rebase
方法而不是子类化。使用这些功能的最规范方法是通过为AgentBuilder
使用的内容定义Java代理。