我需要在 intercept()
期间获取方法的声明类的注释(其中的值):
@RuntimeType
public static Object intercept(@SuperCall Callable callable, @Origin Method method) throws Exception {
method.getDeclaringClass().getDeclaredAnnotation(SomeAnnotationOnClass.class);
最后一行返回 null。
new AgentBuilder.Default().with(AgentBuilder.Listener.StreamWriting.toSystemOut()).type(ElementMatchers.isAnnotatedWith(SomeAnnotationOnClass.class))
.transform((builder, type, clazzLoader, javaModule) -> {
return builder.method(ElementMatchers.any()).intercept(MethodDelegation.to(MyInterceptor.class));
这虽然有效...所以注释存在(在类级别!)。但在调用 intercept()
时则不然
最佳答案
您可以定义自己的绑定(bind)器,该绑定(bind)器在类文件级信息仍然可用的检测过程中执行。假设您定义了一个带有运行时保留的注释 @interface Foo
,您可以实现一些:
class FooBinder extends ParameterBinder.ForFixedValue<Foo>
您可以在其中从注释中提取常量值。然后,该值可用于任何用 @Foo
注释的拦截器方法。
关于java - ByteBuddy - 获取在拦截()内声明类的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635335/