SpringFramework中的ResolvableType

1 示例程序


/** BaseService **/
public abstract class BaseService<T> {}/** PriorityOrder **/
public interface PriorityOrder<T>{}/** CustomService**/
interface CustomService<T,K>{}/** CustomServiceImpl**/
public class CustomServiceImpl<ArrayList> extends BaseService<List<String>>implements CustomService<List<Map<String, Integer>>, BaseService<Set>>,PriorityOrder<Integer> {private HashMap<Integer, List<String>> map;
}

public class RawGenericTypeTest {public static void main(String[] args) {TypeVariable<Class<CustomServiceImpl>>[] typeParameters = CustomServiceImpl.class.getTypeParameters();//ArrayListprint(typeParameters);Type genericSuperclass = CustomServiceImpl.class.getGenericSuperclass();//com...BaseService<java.util.List<java.lang.String>>print(genericSuperclass);Type[] genericInterfaces = CustomServiceImpl.class.getGenericInterfaces();//com...CustomService<//                  java.util.List<java.util.Map<java.lang.String, java.lang.Integer>>//                    , com...BaseService<java.util.Set>//                  >//com...PriorityOrder<java.lang.Integer>print(genericInterfaces);}public static void  print(Type ...types){for (Type type : types) {System.out.println(type);}}
}

Spring ResolvableType 实现

ResolvableType 的类定义如下,我们这里关心3个实例变量:

class ResolvableType{private final Type type;private ResolvableType[] interfaces;private ResolvableType[] generics;
}

我们现在要获取 CustomServiceImpl定义中父类的泛型

/** CustomServiceImpl**/
public class CustomServiceImpl<ArrayList> extends BaseService<List<String>>implements CustomService<List<Map<String, Integer>>, BaseService<Set>>,PriorityOrder<Integer> {private HashMap<Integer, List<String>> map;
}ResolvableType resolvableType = ResolvableType.forClass(CustomServiceImpl.class);
ResolvableType superType = resolvableType.getSuperType();
System.out.println(superType);
//output: BaseService<java.util.List<java.lang.String>>
System.out.println(superType.getGeneric(0));
//output: java.util.List<java.lang.String>
System.out.println(superType.getGeneric(0,0));
//output: java.lang.String/** BaseService<List<String>> **/
// BaseService 被封装成了ResolvableType
// ResolvableType
//  |-type:BaseService
//  |-ResolvableType[] generics
//      |-ResolvableType            [0]
//          |-type:List
//          |-ResolvableType[]generics
//              3|-ResolvableType   [0][0]
//                  |-type:String
//                  |-null

我们现在要获取 CustomServiceImpl定义中实现接口的泛型

/** CustomServiceImpl**/
public class CustomServiceImpl<ArrayList> extends BaseService<List<String>>implements CustomService<List<Map<String, Integer>>, BaseService<Set>>,PriorityOrder<Integer> {private HashMap<Integer, List<String>> map;
}ResolvableType[] interfaces = ResolvableType.forClass(CustomServiceImpl.class).getInterfaces();
//获取CustomService接口的ResolvableType
ResolvableType customServiceType = interfaces[0];
//获取CustomService接口的第一个泛型参数List的ResolvableType
System.out.println(customServiceType.getGeneric(0));
//获取PriorityOrder接口的ResolvableType
ResolvableType priorityOrderType = interfaces[1]

Spring中获取泛型类型相关推荐

  1. Spring 中获取servletContext及WebApplicationContext以及applicationContext三者之间的关系

    spring中获取servletcontext 代码如下,关键是要知道 contextLoader的强大!其它很简单 WebApplicationContext webApplicationConte ...

  2. Java笔记-通过反射获取注解及Spring中获取某包下的所有class文件

    首先来看看使用反射来获取注解名: 只需在获取class后调用getAnnotation方法即可,如下 这里是获取JPA映射b表名,Table.class,使用下面这个可以获取表名 import jav ...

  3. Spring 中获取 request 的几种方法,及其线程安全性分析

    概述 在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址.请求的url.header中的属性(如cookie.授权信息).body中的数据等 ...

  4. Spring中获取request的方法及其线程安全性分析

    在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址.请求的url.header中的属性(如cookie.授权信息).body中的数据等.由于 ...

  5. Spring中获取bean的方式

    1. 获取bean 在上图的测试类中我们是通过id来获取bean的.实际上获取bean的方式有很多种,下面我们就一一说明. 1.1 方式一:根据id获取 由于 id 属性指定了 bean 的唯一标识, ...

  6. Spring中获取bean

    2019独角兽企业重金招聘Python工程师标准>>> import java.lang.reflect.InvocationTargetException; import org. ...

  7. Spring中获取Session的方法汇总

    Spring: web.xml <listener> <listener-class>org.springframework.web.context.request.Reque ...

  8. FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean

    前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...

  9. Spring中Bean对象的存储和获取

    目录 1. 更简单的将bean存储到spring中 1.0 前置工作,在配置文件中设置bean扫描的根路径 1.1 通过注解将bean存储到spring中 1.1.1 @Controller[控制器] ...

最新文章

  1. 技术“摸鱼” 大神,国外小哥 5 年白拿 45 万工资!
  2. Linux中expect的命令的使用
  3. DATAGUARD 三种保护模式
  4. python笔记之for循环
  5. maven 构建增量包_使用Maven进行增量构建
  6. java object转泛型_为什么Java的泛型要用擦除实现
  7. 当我们群嘲假博士时,不要忘了真博士们的艰辛
  8. Different Integers
  9. springboot幂等性_SpringBoot+Redis实现接口幂等性,就看这篇了
  10. Qt TCP协议 传输简单字符串实例
  11. jmeter获取毫秒时间戳
  12. 并不对劲的AC自动机
  13. 基于单片机的KTV智能调光系统设计
  14. html中画分割线的代码,各种分割线Html代码
  15. java web运行网址_猫哥带你去战斗——Java Web开发——网页篇[0]——第一个网页,第一次访问...
  16. 远程粒子计数器助力药企环境监测 为洁净卫生护航
  17. 用VASP+VTST计算Raman光谱 (抛砖引玉)
  18. python 合并工作簿_Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)...
  19. 【已解决】LaTeX 调整段落之间的间距 (包含:只调整某一个section或者subsection中的段落间距)
  20. qt文件逐行读取_QT平台文件逐行读取和字符串规律输出练习

热门文章

  1. html5实现视频播放器 弹幕效果,基于HTML5的有弹幕功能的视频播放器
  2. Soul网关源码阅读(九)插件配置加载初探
  3. oracle 函数 abs,Oracle 函数(八)
  4. 华为鸿蒙手机开机动画,华为“鸿蒙”来了!开机动画美炸了,用PPT一分钟就搞定...
  5. yii 执行指定迁移文件_laravel的迁移文件
  6. c语言结构体tdl,计算机等级二级C笔试考前练习习题(21)
  7. python手机编译器推荐_Python编译器最新版|Python编译器手机版下载 v1.2 安卓版 - 数码资源网...
  8. d. powerful ksenia_DEBON D.D |这才是每个女人应该拥有的
  9. 累加List对象中的某一个值
  10. Spring Boot整合MyBatis连接Oracle数据库