使用byte-buddy重新定义一个类

时间:2017-03-14 13:26:03

标签: java instrumentation byte-buddy

我想重新定义已在现有框架中定义的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();

1 个答案:

答案 0 :(得分:0)

可以使用Byte Buddy重新定义一个班级。为此,您将使用ByteBuddy::redefineByteBuddy::rebase方法而不是子类化。使用这些功能的最规范方法是通过为AgentBuilder使用的内容定义Java代理。