如何将 class 与内部注释匹配?

How to match a class with annotation inside?

我有一个名为 Metric

的注释
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface Metric {
    String name() default "";
}

我想在某些带有 @Metric 注释的方法时编织一些逻辑,例如:

public class MethodWithMetricDemo{

    @Metric
    public void targetMethod(){
        // do some thing
    }
}

但是如何匹配new AgentBuilder.Default().type(xxxxxxxxxxxxxxxx)中的classMethodWithMetricDemo呢?

您需要根据方法注释来匹配您的类型。由于方法实际上是继承的,因此您需要 hasSuperType(declaresMethod(isAnnotatedWith(...))) 遍历整个 class 层次结构。这是可能的,但相当昂贵。如果您选择使用这样的匹配器,您可能应该将匹配限制在给定的命名空间。