homebody可以帮助我给我一个提示如何使用byte-buddy 1.6.9重新定义静态方法吗?
我已经尝试过了:
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
谢谢
发布于 2017-03-05 18:32:05
每个类加载器只能加载一次类。为了替换一个方法,您需要使用一个Java代理来连接到JVM的HotSwap特性。
Byte Buddy提供了一个使用这样的代理的类加载策略,使用:
.load(Source.class.getClassLoader(),
ClassReloadingStrategy.fromInstalledAgent());但是,这需要您安装Java代理。在JDK上,您可以通过ByteBuddyAgent.install() (包含在字节-伙伴-代理工件中)以编程方式完成此操作。在JVM上,您必须在命令行上指定代理。
https://stackoverflow.com/questions/42602622
复制相似问题