首页 > 解决方案 > 声明的作用是什么?Bytebuddy 中的 ElementMatcher

问题描述

任何人都可以解释该语句到底是做什么的?为什么它把一层包裹成一层。

匹配器是:

ElementMatchers.declaresMethod(ElementMatchers
  .isAnnotatedWith(ElementMatchers.named("com.agent.tool.Trace")))

应用于此代码:

package com.agent.tool

@Target({ElementType.METHOD,ElementType.TYPE,ElementType.PACKAGE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Trace {

  String[] argumentName() default {};
}

我可以这样写吗

ElementMatchers.declaresMethod("com.agent.tool.Trace")

或者

ElementMatchers.declaresMethod((ElementMatchers
   .isAnnotatedWith("com.agent.tool.Trace"))

标签: byte-buddy

解决方案


Byte Buddy 元素匹配器通常可以嵌套,通过组合几个注释来匹配甚至复杂的条件。如果你想匹配任何带有特定名称注释的方法,你需要一个额外的 matcher named

declaresMethod(isAnnotatedWith(named("com.agent.tool.Trace")))

推荐阅读