Spring中获取泛型类型
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中获取泛型类型相关推荐
- Spring 中获取servletContext及WebApplicationContext以及applicationContext三者之间的关系
spring中获取servletcontext 代码如下,关键是要知道 contextLoader的强大!其它很简单 WebApplicationContext webApplicationConte ...
- Java笔记-通过反射获取注解及Spring中获取某包下的所有class文件
首先来看看使用反射来获取注解名: 只需在获取class后调用getAnnotation方法即可,如下 这里是获取JPA映射b表名,Table.class,使用下面这个可以获取表名 import jav ...
- Spring 中获取 request 的几种方法,及其线程安全性分析
概述 在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址.请求的url.header中的属性(如cookie.授权信息).body中的数据等 ...
- Spring中获取request的方法及其线程安全性分析
在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址.请求的url.header中的属性(如cookie.授权信息).body中的数据等.由于 ...
- Spring中获取bean的方式
1. 获取bean 在上图的测试类中我们是通过id来获取bean的.实际上获取bean的方式有很多种,下面我们就一一说明. 1.1 方式一:根据id获取 由于 id 属性指定了 bean 的唯一标识, ...
- Spring中获取bean
2019独角兽企业重金招聘Python工程师标准>>> import java.lang.reflect.InvocationTargetException; import org. ...
- Spring中获取Session的方法汇总
Spring: web.xml <listener> <listener-class>org.springframework.web.context.request.Reque ...
- FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean
前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...
- Spring中Bean对象的存储和获取
目录 1. 更简单的将bean存储到spring中 1.0 前置工作,在配置文件中设置bean扫描的根路径 1.1 通过注解将bean存储到spring中 1.1.1 @Controller[控制器] ...
最新文章
- 技术“摸鱼” 大神,国外小哥 5 年白拿 45 万工资!
- Linux中expect的命令的使用
- DATAGUARD 三种保护模式
- python笔记之for循环
- maven 构建增量包_使用Maven进行增量构建
- java object转泛型_为什么Java的泛型要用擦除实现
- 当我们群嘲假博士时,不要忘了真博士们的艰辛
- Different Integers
- springboot幂等性_SpringBoot+Redis实现接口幂等性,就看这篇了
- Qt TCP协议 传输简单字符串实例
- jmeter获取毫秒时间戳
- 并不对劲的AC自动机
- 基于单片机的KTV智能调光系统设计
- html中画分割线的代码,各种分割线Html代码
- java web运行网址_猫哥带你去战斗——Java Web开发——网页篇[0]——第一个网页,第一次访问...
- 远程粒子计数器助力药企环境监测 为洁净卫生护航
- 用VASP+VTST计算Raman光谱 (抛砖引玉)
- python 合并工作簿_Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)...
- 【已解决】LaTeX 调整段落之间的间距 (包含:只调整某一个section或者subsection中的段落间距)
- qt文件逐行读取_QT平台文件逐行读取和字符串规律输出练习
热门文章
- html5实现视频播放器 弹幕效果,基于HTML5的有弹幕功能的视频播放器
- Soul网关源码阅读(九)插件配置加载初探
- oracle 函数 abs,Oracle 函数(八)
- 华为鸿蒙手机开机动画,华为“鸿蒙”来了!开机动画美炸了,用PPT一分钟就搞定...
- yii 执行指定迁移文件_laravel的迁移文件
- c语言结构体tdl,计算机等级二级C笔试考前练习习题(21)
- python手机编译器推荐_Python编译器最新版|Python编译器手机版下载 v1.2 安卓版 - 数码资源网...
- d. powerful ksenia_DEBON D.D |这才是每个女人应该拥有的
- 累加List对象中的某一个值
- Spring Boot整合MyBatis连接Oracle数据库