必威体育Betway必威体育官网
当前位置:首页 > IT技术

Reflections 详细介绍

时间:2019-05-31 12:43:06来源:IT技术作者:seo实验室小编阅读:53次「手机版」
 

reflections

reflections 详细介绍

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)

相关阅读

java 非常好用的反射框架Reflections

Reflections通过扫描classpath,索引元数据,并且允许在运行时查询这些元数据。 使用Reflections可以很轻松的获取以下元数据信息: 1)获

分享到:

栏目导航

推荐阅读

热门阅读