java - ByteBuddy - 获取在拦截()内声明类的注释

标签 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() 时则不然

最佳答案

您可以定义自己的绑定(bind)器,该绑定(bind)器在类文件级信息仍然可用的检测过程中执行。假设您定义了一个带有运行时保留的注释 @interface Foo,您可以实现一些:

class FooBinder extends ParameterBinder.ForFixedValue<Foo>

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

关于java - ByteBuddy - 获取在拦截()内声明类的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635335/

相关文章:

java - 在 CVS 中维护 Eclipse 项目 include/lib 路径

java - 在java中检索方法参数的数量和参数名称

c# - 如何从类中获取 'ReadOnly' 或 'WriteOnly' 属性?

关于泛型和反射的 Java 基础知识

android - 我可以在编译过程中使用Byte Buddy转换已编译的类吗?

java - 是否可以使用 ByteBuddy 更改注释的值?

java - 如何使用 bytebuddy 更改方法签名?

java - SonarQube 无法识别某些 Lombok 注释 - Jacoco 的误导性测试覆盖率结果

java - 在java异常中使用Solrj

c# - 如何发出返回 ref 的动态方法?