ByteBuddy - 获取在intercept()中声明类的注释

时间:2017-10-08 19:45:29

标签: java reflection byte-buddy

我需要在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()

1 个答案:

答案 0 :(得分:1)

您可以定义在类文件级信息仍然可用的检测期间执行的自己的活页夹。假设您定义了具有运行时保留的注释@interface Foo,您可以实现一些:

class FooBinder extends ParameterBinder.ForFixedValue<Foo>

您可以从注释中提取常量值。然后,此值可用于使用@Foo注释的任何拦截器方法。