Java 用字节重发类
Byte Buddy是否能够Java 用字节重发类,java,instruments,javaagents,byte-buddy,Java,Instruments,Javaagents,Byte Buddy,Byte Buddy是否能够插装#重新传输已加载的类?我想使用Byte Buddy的Java代理特性,这样我就不必指定-javaagent来插入类。这是可能的,例如使用Javassist。但我正在评估用Byte Buddy替换它 我想在某些方法之前和之后插入一个静态方法调用。如果这是可能的,一个简短的例子将是伟大的 是的,您可以使用AgentBuilderAPI来启用重新传输。安装代理后,Byte Buddy将重新传输所有已加载的类。您可以这样启用重新传输: AgentBuilder build
插装#重新传输已加载的类
?我想使用Byte Buddy的Java代理特性,这样我就不必指定-javaagent
来插入类。这是可能的,例如使用Javassist。但我正在评估用Byte Buddy替换它
我想在某些方法之前和之后插入一个静态方法调用。如果这是可能的,一个简短的例子将是伟大的 是的,您可以使用
AgentBuilder
API来启用重新传输。安装代理后,Byte Buddy将重新传输所有已加载的类。您可以这样启用重新传输:
AgentBuilder builder = new AgentBuilder.Default()
.with(RedefinitionStrategy.RETRANSFORMATION)
.with(InitializationStrategy.NoOp.INSTANCE)
.with(TypeStrategy.Default.REDEFINE);
您可能想知道需要打开哪些不同的开关:
Advice
类进行手动重新定义
通过这种方式,您可以通过向自己的代码(如Advice.to(Foo.class)
)提供建议来增强现有代码,其中引用的类的字节码在被拦截的方法之前和之后插入:
class Foo {
@Advice.OnMethodEnter
@Advice.OnMethodExit
private static void intercept() {
System.out.println("Before/after");
}
}
您可以在javadoc中找到有关建议的更多信息