天天看點

Spring:擷取的注解資訊為null

1. 問題現象

  開發架構使用Spring Boot,啟動程式時通過Class對象擷取對象上的注解資訊,運作時未擷取到注解資訊。

2. 問題原因

  程式啟動時擷取的Class對象時Spring通過CGLIB生成的代理對象,不是原始對象,是以無法通過代理對象的Class資訊擷取注解資訊。

  擷取到的class資訊如下:

  

Spring:擷取的注解資訊為null

   由圖可知該對象并不是原始對象,而是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);      

如果文章對您有所幫助,可以點一下推薦哦