Reflections 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Reflections 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Reflections 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Reflections 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Reflections 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 GPLv2
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发常用工具包
开发厂商
地区 不详
提 交 者 玛雅牛
适用人群 未知
收录时间 2015-08-22

软件简介

Reflections 通过扫描 classpath,索引元数据,允许在运行时查询这些元数据,也可以保存收集项目中多个模块的元数据信息。

使用 Reflections 可以查询以下元数据信息: 
1)获得某个类型的所有子类型
2)获得标记了某个注解的所有类型/成员变量,支持注解参数匹配。
3)使用正则表达式获得所有匹配的资源文件
4)获得所有特定签名(包括参数,参数注解,返回值)的方法

Reflections 依赖 Google 的 Guava 库和 Javassist 库。

Maven 项目导入

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

通常用法:

Reflections reflections = new Reflections("my.project");

Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeType.class);

Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(SomeAnnotation.class);

Reflections 初始化代码。

//scan urls that contain 'my.package', include inputs starting with 'my.package', use the default scanners
Reflections reflections = new Reflections("my.package");

//or using ConfigurationBuilder
new Reflections(new ConfigurationBuilder()
     .setUrls(ClasspathHelper.forPackage("my.project.prefix"))
     .setScanners(new SubTypesScanner(), 
                  new TypeAnnotationsScanner().filterResultsBy(optionalFilter), ...),
     .filterInputsBy(new FilterBuilder().includePackage("my.project.prefix"))
     ...);

以下是一些使用例子代码。

//SubTypesScanner
Set<Class<? extends Module>> modules = 
    reflections.getSubTypesOf(com.google.inject.Module.class);
//TypeAnnotationsScanner 
Set<Class<?>> singletons = 
    reflections.getTypesAnnotatedWith(javax.inject.Singleton.class);
//ResourcesScanner
Set<String> properties = 
    reflections.getResources(Pattern.compile(".*\\.properties"));
//MethodAnnotationsScanner
Set<Method> resources =
    reflections.getMethodsAnnotatedWith(javax.ws.rs.Path.class);
Set<Constructor> injectables = 
    reflections.getConstructorsAnnotatedWith(javax.inject.Inject.class);
//FieldAnnotationsScanner
Set<Field> ids = 
    reflections.getFieldsAnnotatedWith(javax.persistence.Id.class);
//MethodParameterScanner
Set<Method> someMethods =
    reflections.getMethodsMatchParams(long.class, int.class);
Set<Method> voidMethods =
    reflections.getMethodsReturn(void.class);
Set<Method> pathParamMethods =
    reflections.getMethodsWithAnyParamAnnotated(PathParam.class);
//MethodParameterNamesScanner
List<String> parameterNames = 
    reflections.getMethodParamNames(Method.class)
//MemberUsageScanner
Set<Member> usages = 
    reflections.getMethodUsages(Method.class)

展开阅读全文

代码

评论 (1)

加载中
不错,自己做一套注解即可实现扫描加载业务模块。 #Reflections#
2016/11/04 09:07
回复
举报
更多评论
暂无内容
发表了博客
2019/03/13 15:11

Reflections 介绍

Reflections 介绍 研究Spring扫包原理的时候,在网上查阅相关资料的时候,发现使用Reflections库可以实现扫包。 Reflections 通过扫描 classpath,索引元数据,允许在运行时查询这些元数据,也可以保存收集项目中多个模块的元数据信息,值得一提的是,这东西在扫描的时候,连依赖的jar包都不放过。 使用 Reflections 可以...

0
0
发表了博客
2013/06/17 20:34

Reflections scans your classpath, indexes the m...

https://code.google.com/p/reflections/ Java runtime metadata analysis, in the spirit ofScannotations Reflections scans your classpath, indexes the metadata, allows you to query it on runtime and may save and collect that information for many modules within your project. Using Reflections you can ...

2
0
发表了博客
2019/04/10 14:16

Reflections框架,类扫描工具

Reflections是一个能提供一站式服务的对象。 巧用Reflections库实现包扫描(扫描某个包中某个接口实现、注解等) 它扫描工程的classpath,为元数据建索引,允许你运行时查询元数据信息。此外,他还能为你项目的lib库中所有的jar包保存和收集元数据。 1. 借助它能做什么? 获取某个类型的全部子类 只要类型、构造器、方法...

0
0
发表于开发技能专区
01/04 19:21

Java反射工具包reflections

1. 简介 reflections是一个Java反射工具包,使用它可以非常方便的获取一下字段或者方法。 2. maven <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <versi......

0
0
2019/02/21 20:46

java 非常好用的反射框架Reflections

Reflections通过扫描classpath,索引元数据,并且允许在运行时查询这些元数据。 使用Reflections可以很轻松的获取以下元数据信息: 1)获取某个类型的所有子类;比如,有一个父类是TestInterface,可以获取到Tes...

0
0
发表于服务端专区
2020/03/19 18:33

获取接口所有子类和获取枚举扩展属性

问题: 如何根据接口获取所有子类/实现类 获取枚举的所有值 反射获取扩展属性 处理 引入 reflections 类库 <dependency> <groupId>org.reflections</groupId> <artifactId>refl...

0
0
2015/12/30 21:06

Java获取所有子类、实现类

扫描jvm中所有实现类

0
1
发表了博客
2019/05/04 22:29

Java 获取所有子类信息

我以前的博客(Java Scala获取注解的类信息)介绍过通过Reflections工具通过使用特定注解的类的信息,其实本工具也可以获取接口,抽象类,类等的所有子类信息。使用方法如下: Reflections reflections = new Reflections("my.project"); Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeTy...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
1 评论
26 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部