首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ByteBuddy重新定义静态方法

使用ByteBuddy重新定义静态方法
EN

Stack Overflow用户
提问于 2017-03-05 07:33:42
回答 1查看 1.5K关注 0票数 1

homebody可以帮助我给我一个提示如何使用byte-buddy 1.6.9重新定义静态方法吗?

我已经尝试过了:

代码语言:javascript
复制
public class Source {
    public  static String hello(String name) {return null;}
}


public class Target {
    public static String hello(String name) {
        return "Hello" + name+ "!";
    }
}
String helloWorld = new ByteBuddy()
                .redefine(Source.class)               
                .method(named("hello"))
                .intercept(MethodDelegation.to(Target.class))
                .make()
                .load(getClass().getClassLoader())
                .getLoaded()
                .newInstance()
                .hello("World");

我得到了以下异常:

线程"main“java.lang.IllegalStateException中出现异常:无法插入已加载的类型:类delegation.Source

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-03-05 18:32:05

每个类加载器只能加载一次类。为了替换一个方法,您需要使用一个Java代理来连接到JVM的HotSwap特性。

Byte Buddy提供了一个使用这样的代理的类加载策略,使用:

代码语言:javascript
复制
.load(Source.class.getClassLoader(), 
      ClassReloadingStrategy.fromInstalledAgent());

但是,这需要您安装Java代理。在JDK上,您可以通过ByteBuddyAgent.install() (包含在字节-伙伴-代理工件中)以编程方式完成此操作。在JVM上,您必须在命令行上指定代理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42602622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档