Spring:获取的注解信息为null

1. 问题现象

  开发框架使用Spring Boot,启动程序时通过Class对象获取对象上的注解信息,运行时未获取到注解信息。

2. 问题原因

  程序启动时获取的Class对象时Spring通过CGLIB生成的代理对象,不是原始对象,因此无法通过代理对象的Class信息获取注解信息。

  获取到的class信息如下:

  

   由图可知该对象并不是原始对象,而是cglib代理对象

3. 解决方法

3.1  Spring 的 AnnotationUtils 工具类

  AnnotationUtils.findAnnotation(beanClazz, WebServiceAction.class);

  beanClazz:cglib生成的Class对象

  WebServiceAction:获取的注解类型

3.2  通过反射原始类信息获取原始对象的Class对象

  Type superclassType = beanClazz.getGenericSuperclass();

  // superclassType.getTypeName()获取的是原始类的完全限定名,包路径+类名

  Class beanClazz = Class.forName(superclassType.getTypeName());

  WebServiceAction annotation = beanClazz.getAnnotation(WebServiceAction.class);

  

原文地址:https://www.cnblogs.com/virgosnail/p/12700970.html