zoukankan      html  css  js  c++  java
  • 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);

      

  • 相关阅读:
    tomcat进阶操作
    tomcat环境部署
    CentOS 7.2安装lepus数据库监控系统
    常见的Linux系统监控命令
    zabbix使用jmx监控tomcat
    zabbix配置文件详解
    zabbix2.2.22 升级3.0.18
    zabbix日志监控
    zabbix api的使用
    zabbix低级自动发现之mysql多实例
  • 原文地址:https://www.cnblogs.com/virgosnail/p/12700970.html
Copyright © 2011-2022 走看看