cglib获取不到接口注解

背景

  • 我想实现的是获取interface类上的注解,代理使用的是cglib
  • 这是我的注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public  @interface HbServerName {

    /**
     *  服务名称
     * **/
    String value() default "";

    /***
     * 地址前缀
     * */
    String serverUrlPrefix() default "";


}

  • 我获取的是一个接口上的HbServerName 注解。但是返回是null

解决方案

  • 我对比了以下几种方式
...省略...
// target是我构造器传进来的
  HbServerName annotation = target.getAnnotation(HbServerName.class);
  HbServerName annotation2 = obje.getClass().getAnnotation(HbServerName.class);
   HbServerName annotation1 = Class.forName(target.getName()).getAnnotation(HbServerName.class);
   HbServerName hbServerName = AnnotationUtils.findAnnotation(obje.getClass(), HbServerName.class);

...省略...
  • 运行结果如下图所示。
    在这里插入图片描述
  • 可以看到这2种办法是可以的。
   HbServerName annotation1 = Class.forName(target.getName()).getAnnotation(HbServerName.class);
   HbServerName hbServerName = AnnotationUtils.findAnnotation(obje.getClass(), HbServerName.class);
  • Class.forName重新得到class或者使用Spring的AnnotationUtils#findAnnotation

参考

posted on 2022-03-24 18:01  愤怒的苹果ext  阅读(135)  评论(0编辑  收藏  举报

导航