Классы фильтров, которые снабжены указанной аннотацией

Я использую Java-агенты для манипулирования байт-кодом, и я хотел бы генерировать методы в классы, которые снабжены конкретной аннотацией. Как я могу сделать?

Что-то вроде этого:

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

Если это возможно, отфильтруйте по полному имени аннотации, например com.example.Foo вместо Foo.class,

2 ответа

Я нашел подходящее решение, используя 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);

Вы можете использовать ElementMatchers реализовать hasAnnotation(annotationType(named(...))),

Другие вопросы по тегам