Java 使用ByteBuddy检测同一类中的多个方法
我目前正在尝试制作一个logger代理,我目前正在拦截类PrepareStatement。 在PrepareStatement中,我希望跟踪多种方法,但我感觉我做得不对 通常,我现在要做的是截取我希望监视的每个方法,并将该agentbuilder安装到仪器中,如下所示:Java 使用ByteBuddy检测同一类中的多个方法,java,monitoring,agent,byte-buddy,Java,Monitoring,Agent,Byte Buddy,我目前正在尝试制作一个logger代理,我目前正在拦截类PrepareStatement。 在PrepareStatement中,我希望跟踪多种方法,但我感觉我做得不对 通常,我现在要做的是截取我希望监视的每个方法,并将该agentbuilder安装到仪器中,如下所示: private static void Install(String className, String methodName, Instrumentation instr) { new AgentBui
private static void Install(String className, String methodName,
Instrumentation instr) {
new AgentBuilder.Default().disableClassFormatChanges()
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.type(ElementMatchers.hasSuperType(ElementMatchers.named(className)))
.transform((builder, typeDescription, classLoader, module) -> {
return builder.visit(Advice.to(MyInterceptor.class)
.on(ElementMatchers.named(methodName)));
}).installOn(instrumentation);
}
安装(仪器);感觉不对,因为我真正想做的是对同一台变压器应用许多建议,然后将其安装到仪表上
我试图实现的一些伪代码:
private static AgentBuilder Install(String className,
Instrumentation instr) {
return new AgentBuilder.Default().disableClassFormatChanges()
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.type(ElementMatchers.hasSuperType(ElementMatchers.named(className)))
.transform((builder, typeDescription, classLoader, module) -> {
builder.visit(Advice.to(MyFirstInterceptor.class)
.on(ElementMatchers.named("first method")));
builder.visit(Advice.to(MySecondInterceptor.class)
.on(ElementMatchers.named("second method")));
});
}
我如何才能更优雅地做到这一点?
如何在多个类中实现这一点
谢谢你的帮助!
亲切问候。如果您作为访客使用
建议
,装饰可以由以下部分组成:
return builder
.visit(Advice.to(MyFirstInterceptor.class)
.on(ElementMatchers.named("first method")))
.visit(Advice.to(MySecondInterceptor.class)
.on(ElementMatchers.named("second method")));
如果要针对多种类型,还可以在安装之前链接多个type
语句。如果多个这样的匹配器匹配一个类型,则仅匹配最后一个类型,除非您在DSL中指定asDecorator