我正在使用Java代理来操纵字节码,我想将方法生成到使用特定注释进行注释的类中。我该怎么办?
类似这样的东西:
@Foo public class Bar {
// inject methods here
}
如果可能,请按完全合格的注释名称(例如com.example.Foo
而不是Foo.class
进行过滤。
答案 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(...)))
。