Java 使用ByteBuddy检测同一类中的多个方法

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

我目前正在尝试制作一个logger代理,我目前正在拦截类PrepareStatement。 在PrepareStatement中,我希望跟踪多种方法,但我感觉我做得不对

通常,我现在要做的是截取我希望监视的每个方法,并将该agentbuilder安装到仪器中,如下所示:

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