Java反射工具包reflections
文章目录
- 1. 简介
- 2. maven
- 3. 配置
- 4. 通过类型扫描
- 5. 通过注解扫描
- 6. 方法相关
- 7. 工具类
- 8. 资料文档
1. 简介
reflections是一个Java反射工具包,使用它可以非常方便的获取一下字段或者方法。
2. maven
<dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId><version>0.9.12</version>
</dependency>
3. 配置
最简单的配置,就是直接指定扫描包:
Reflections reflections = new Reflections(“java.util”);
当然,也可以:
@Test
public void config(){ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();//扫描vip.mycollege.jdk.reflect包Collection<URL> scannerPkg = ClasspathHelper.forPackage("vip.mycollege.jdk.reflect");SubTypesScanner subTypesScanner = new SubTypesScanner();//注解扫描TypeAnnotationsScanner typeAnnotationsScanner = new TypeAnnotationsScanner();FilterBuilder filter = new FilterBuilder().includePackage("vip.mycollege.jdk.reflect")//注解扫描包.excludePackage("vip.mycollege.jdk.reflect.thirdpart");//注解扫描扫描排除包typeAnnotationsScanner.filterResultsBy(filter);ConfigurationBuilder configuration = configurationBuilder.setUrls(scannerPkg).setScanners(subTypesScanner, typeAnnotationsScanner);Reflections reflections = new Reflections(configuration);
}
4. 通过类型扫描
@Test
public void newInstance(){Reflections reflections = new Reflections("java.util");//获取List及其子类Set<Class<? extends List>> listImpls = reflections.getSubTypesOf(List.class);listImpls.forEach(System.out::println);
}
5. 通过注解扫描
@Test
public void methodAnnotationsScanner(){Reflections reflections = new Reflections(SCAN_PKG);//方法上有Deprecated注解Set<Method> resources = reflections.getMethodsAnnotatedWith(Deprecated.class);//有PostConstruct注解的构造方法Set<Constructor> injectables = reflections.getConstructorsAnnotatedWith(PostConstruct.class);
}@Test
public void FieldAnnotationsScanner(){//指定包下有Nonnegative的字段Reflections reflections = new Reflections(SCAN_PKG);Set<Field> ids = reflections.getFieldsAnnotatedWith(Nonnegative.class);
}
6. 方法相关
@Test
public void methodParameterScanner(){Reflections reflections = new Reflections(SCAN_PKG);//参数类型是long和intSet<Method> someMethods = reflections.getMethodsMatchParams(long.class, int.class);//参数返回值是voidSet<Method> voidMethods = reflections.getMethodsReturn(void.class);//任何参数上有注解NullableSet<Method> pathParamMethods = reflections.getMethodsWithAnyParamAnnotated(Nullable.class);for(Method method : someMethods) {//获取方法参数的名称List<String> parameterNames = reflections.getMethodParamNames(method);parameterNames.forEach(System.out::println);}
}
7. 工具类
@Test
public void reflectionUtils(){//必须是public方法Predicate<Method> publicPredicate = ReflectionUtils.withModifier(Modifier.PUBLIC);//有get前缀Predicate<Method> getPredicate = ReflectionUtils.withPrefix("get");//参数个数为0Predicate<Member> paramPredicate = ReflectionUtils.withParametersCount(0);Set<Method> methods = ReflectionUtils.getAllMethods(LinkedList.class, publicPredicate, getPredicate, paramPredicate);methods.forEach(method -> System.out.println(method.getName()));System.out.println("---------------");//参数必须是Collection及其子类Predicate<Member> paramsPredicate = ReflectionUtils.withParametersAssignableTo(Collection.class);//返回类型是booleanPredicate<Method> returnPredicate = ReflectionUtils.withReturnType(boolean.class);methods = ReflectionUtils.getAllMethods(LinkedList.class, paramsPredicate, returnPredicate);methods.forEach(method -> System.out.println(method.getName()));System.out.println("---------------");//字段有注解NativePredicate<Field> annotationPredicate = ReflectionUtils.withAnnotation(Native.class);//字段类型是int及其子类Predicate<Field> typeAssignablePredicate = ReflectionUtils.withTypeAssignableTo(int.class);Set<Field> fields = ReflectionUtils.getAllFields(Integer.class, annotationPredicate, typeAssignablePredicate);
// Set<Field> fields = ReflectionUtils.getAllFields(Integer.class, annotationPredicate);
// Set<Field> fields = ReflectionUtils.getAllFields(Integer.class, typeAssignablePredicate);fields.forEach(field -> System.out.println(field.getName()));
}
8. 资料文档
Github
Java反射工具包reflections相关推荐
- java reflections_关于java:java反射工具Reflections用法
java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中蕴含很多的Scann ...
- java reflections_java 反射工具包reflections
reflections 中包含很多的Scanner ,也就是扫描器,调用对应的方法时需要有配置对应的扫描器,不然程序会抛出异常. 扫描器结构: 使用时,我们主要使用Reflections 这个类来调用 ...
- java 反射 asm,Java反射工具包reflectasm
1. com.esotericsoftware reflectasm 1.11.9 1.实体类 package com.redisson; /** * @Description TODO * @Dat ...
- java reflections_java反射工具Reflections用法
java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中包含很多的Scann ...
- java reflections_Java反射框架Reflections示例详解
MAVEN 坐标 org.reflections reflections 0.9.10 Reflections 的作用 Reflections通过扫描classpath,索引元数据,并且允许在运行时查 ...
- java 反射(Reflection) 详解
jAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- java 反射的效率_如何提高使用Java反射的效率?
前言 在我们平时的工作或者面试中,都会经常遇到"反射"这个知识点,通过"反射"我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另 ...
- 通过Java反射获取对象上的注解,java反射注解妙用-获取所有接口说明
原标题:java反射注解妙用-获取所有接口说明 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shir ...
- java反射获取包下所有的类
引三方包 <dependency><groupId>org.reflections</groupId><artifactId>reflections&l ...
最新文章
- C#对象数组排序方法
- Objective-C 内存管理之ARC规则
- 静态程序分析chapter4 - 基于格(Lattice)理论的数据流分析
- 密码技术应用--RSA文件签名验签
- html css制作计算器,使用html+css+js实现计算器
- Pycharm搭建dajango+Sqlite3
- Struts2文件上传超出配置大小的解决办法
- java通过JDBC驱动连接操作hive实例
- echart移上去显示内容_Echarts X轴内容过长自动隐藏,鼠标移动上去显示全部名称方法...
- Sql server 分解字符串(实现split)
- Android+struts2+JSON方式的手机开发(Login)
- python win32api win32gui win32con PyUserInput实现自动化脚本
- torch随机数 manual_seed
- 罗永浩承认鸟巢发布会不成功,还说苹果把大家都带歪了,你怎么看?
- 推广帖:超好用的mac下shell工具 finalshell --xshell替代,mac ssh客户端
- 魅族手机开机出现Android,魅族开不了机怎么办?如何解决?
- 安卓:股票筛选及分析系统
- codeforces1296F Berland Beauty
- 用APICloud开发仿微信聊天App制作经验分享
- matlab分段函数的表达_使用matlab表示“段数不确定”的分段函数
热门文章
- Centos防火墙的一键开启与关闭
- from caffe2.proto import caffe2_pb2 ImportError: cannot import name caffe2_pb2
- MacOs查看端口号占用
- 软考 | 2016年下半年 软件设计师 下午试卷
- 面试常问——进程和线程的区别
- Efficient Text-based Reinforcement Learning by Jointly LeveragingState and Commonsense Graph Repres
- Java:OOA和UML,一场调兵遣将的“组织架构”的游戏而已
- Inno Setup 5.5.3 安装包制作工具
- 【Java 8 新特性】Java 8 BigDecimal求和
- java响应实体类封装