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);

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM