Классы фильтров, которые снабжены указанной аннотацией
Я использую 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(...)))
,