背景
- 我想实现的是获取
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
参考