文章目录

  • 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相关推荐

  1. java reflections_关于java:java反射工具Reflections用法

    java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中蕴含很多的Scann ...

  2. java reflections_java 反射工具包reflections

    reflections 中包含很多的Scanner ,也就是扫描器,调用对应的方法时需要有配置对应的扫描器,不然程序会抛出异常. 扫描器结构: 使用时,我们主要使用Reflections 这个类来调用 ...

  3. java 反射 asm,Java反射工具包reflectasm

    1. com.esotericsoftware reflectasm 1.11.9 1.实体类 package com.redisson; /** * @Description TODO * @Dat ...

  4. java reflections_java反射工具Reflections用法

    java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中包含很多的Scann ...

  5. java reflections_Java反射框架Reflections示例详解

    MAVEN 坐标 org.reflections reflections 0.9.10 Reflections 的作用 Reflections通过扫描classpath,索引元数据,并且允许在运行时查 ...

  6. java 反射(Reflection) 详解

    jAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  7. java 反射的效率_如何提高使用Java反射的效率?

    前言 在我们平时的工作或者面试中,都会经常遇到"反射"这个知识点,通过"反射"我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另 ...

  8. 通过Java反射获取对象上的注解,java反射注解妙用-获取所有接口说明

    原标题:java反射注解妙用-获取所有接口说明 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shir ...

  9. java反射获取包下所有的类

    引三方包 <dependency><groupId>org.reflections</groupId><artifactId>reflections&l ...

最新文章

  1. C#对象数组排序方法
  2. Objective-C 内存管理之ARC规则
  3. 静态程序分析chapter4 - 基于格(Lattice)理论的数据流分析
  4. 密码技术应用--RSA文件签名验签
  5. html css制作计算器,使用html+css+js实现计算器
  6. Pycharm搭建dajango+Sqlite3
  7. Struts2文件上传超出配置大小的解决办法
  8. java通过JDBC驱动连接操作hive实例
  9. echart移上去显示内容_Echarts X轴内容过长自动隐藏,鼠标移动上去显示全部名称方法...
  10. Sql server 分解字符串(实现split)
  11. Android+struts2+JSON方式的手机开发(Login)
  12. python win32api win32gui win32con PyUserInput实现自动化脚本
  13. torch随机数 manual_seed
  14. 罗永浩承认鸟巢发布会不成功,还说苹果把大家都带歪了,你怎么看?
  15. 推广帖:超好用的mac下shell工具 finalshell --xshell替代,mac ssh客户端
  16. 魅族手机开机出现Android,魅族开不了机怎么办?如何解决?
  17. 安卓:股票筛选及分析系统
  18. codeforces1296F Berland Beauty
  19. 用APICloud开发仿微信聊天App制作经验分享
  20. matlab分段函数的表达_使用matlab表示“段数不确定”的分段函数

热门文章

  1. Centos防火墙的一键开启与关闭
  2. from caffe2.proto import caffe2_pb2 ImportError: cannot import name caffe2_pb2
  3. MacOs查看端口号占用
  4. 软考 | 2016年下半年 软件设计师 下午试卷
  5. 面试常问——进程和线程的区别
  6. Efficient Text-based Reinforcement Learning by Jointly LeveragingState and Commonsense Graph Repres
  7. Java:OOA和UML,一场调兵遣将的“组织架构”的游戏而已
  8. Inno Setup 5.5.3 安装包制作工具
  9. 【Java 8 新特性】Java 8 BigDecimal求和
  10. java响应实体类封装