过滤带有特定注释的类

时间:2019-02-14 17:08:02

标签: java byte-buddy

我正在使用Java代理来操纵字节码,我想将方法​​生成到使用特定注释进行注释的类中。我该怎么办?

类似这样的东西:

@Foo public class Bar {
    // inject methods here
}

如果可能,请按完全合格的注释名称(例如com.example.Foo而不是Foo.class进行过滤。

2 个答案:

答案 0 :(得分:0)

我找到了使用ElementMatchers.isAnnotatedWith方法并将注释类作为参数传递的合适解决方案,但是我仍在寻找一种方法来过滤完全合格的注释名称,例如纯String

new AgentBuilder.Default()
            .type(isAnnotatedWith(ToString.class))
            .transform(new AgentBuilder.Transformer() {
                @Override public DynamicType.Builder<?> transform(
                        DynamicType.Builder<?> builder,
                        TypeDescription typeDescription,
                        ClassLoader classLoader,
                        JavaModule javaModule
                ) {
                    // do some logic here
                }
            }).installOn(instrumentation);

答案 1 :(得分:0)

您可以使用ElementMatchers来实现hasAnnotation(annotationType(named(...)))