Java反射框架Reflections示例详解

所属分类: 软件编程 / java 阅读数: 109
收藏 0 赞 0 分享

MAVEN 坐标

<dependency>
 <groupId>org.reflections</groupId>
 <artifactId>reflections</artifactId>
 <version>0.9.10</version>
</dependency>

Reflections 的作用

Reflections通过扫描classpath,索引元数据,并且允许在运行时查询这些元数据。

  • 获取某个类型的所有子类;比如,有一个父类是TestInterface,可以获取到TestInterface的所有子类。
  • 获取某个注解的所有类型/字段变量,支持注解参数匹配。
  • 使用正则表达式获取所有匹配的资源文件
  • 获取特定签名方法。

使用Reflections可以很轻松的获取以下元数据信息:

项目中使用:

public class ReflectionTest {
 public static void main(String[] args) {
  // 扫包
  Reflections reflections = new Reflections(new ConfigurationBuilder()
    .forPackages("com.boothsun.reflections") // 指定路径URL
    .addScanners(new SubTypesScanner()) // 添加子类扫描工具
    .addScanners(new FieldAnnotationsScanner()) // 添加 属性注解扫描工具
    .addScanners(new MethodAnnotationsScanner() ) // 添加 方法注解扫描工具
    .addScanners(new MethodParameterScanner() ) // 添加方法参数扫描工具
    );

  // 反射出子类
  Set<Class<? extends ISayHello>> set = reflections.getSubTypesOf( ISayHello.class ) ;
  System.out.println("getSubTypesOf:" + set);

  // 反射出带有指定注解的类
  Set<Class<?>> ss = reflections.getTypesAnnotatedWith( MyAnnotation.class );
  System.out.println("getTypesAnnotatedWith:" + ss);

  // 获取带有特定注解对应的方法
  Set<Method> methods = reflections.getMethodsAnnotatedWith( MyMethodAnnotation.class ) ;
  System.out.println("getMethodsAnnotatedWith:" + methods);

  // 获取带有特定注解对应的字段
  Set<Field> fields = reflections.getFieldsAnnotatedWith( Autowired.class ) ;
  System.out.println("getFieldsAnnotatedWith:" + fields);

  // 获取特定参数对应的方法
  Set<Method> someMethods = reflections.getMethodsMatchParams(long.class, int.class);
  System.out.println("getMethodsMatchParams:" + someMethods);

  Set<Method> voidMethods = reflections.getMethodsReturn(void.class);
  System.out.println( "getMethodsReturn:" + voidMethods);

  Set<Method> pathParamMethods =reflections.getMethodsWithAnyParamAnnotated( PathParam.class);
  System.out.println("getMethodsWithAnyParamAnnotated:" + pathParamMethods);
 }
}

具体也可以参见官方文档:官方API

更多精彩内容其他人还在看

Java基于反射机制实现全部注解获取的方法示例

这篇文章主要介绍了Java基于反射机制实现全部注解获取的方法,结合实例形式分析了java反射机制获取注解的具体实现方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 信号量Semaphore的实现

这篇文章主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

eclipse+maven+spring mvc项目基本搭建过程

这篇文章主要介绍了eclipse+maven+spring mvc项目基本搭建过程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring boot集成swagger2生成接口文档的全过程

这篇文章主要给大家介绍了关于Spring boot集成swagger2生成接口文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java冒泡排序法和选择排序法的实现

这篇文章主要介绍了Java冒泡排序法和选择排序法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Cloud Alibaba教程之Sentinel的使用

这篇文章主要介绍了Spring Cloud Alibaba教程之Sentinel的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Josephus环的四种解法(约瑟夫环)基于java详解

这篇文章主要介绍了Josephus环的四种解法(约瑟夫环)基于java详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java继承Thread类创建线程类示例

这篇文章主要介绍了Java继承Thread类创建线程类,结合实例形式分析了java线程操作相关使用技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用Callable和Future创建线程操作示例

这篇文章主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

springBoot使用JdbcTemplate代码实例

这篇文章主要介绍了springBoot使用JdbcTemplate代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多