Reflections 详细介绍

Reflections 详细介绍

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

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

Reflections 依赖 Google 的 Guava 库和 Javassist 库。

Maven 项目导入

<dependency>
    <groupId>org.reflectionsgroupId>
    <artifactId>reflectionsartifactId>
    <version>0.9.10version>
dependency>

通常用法:

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

Set> subTypes = reflections.getSubTypesOf(SomeType.class);

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

你可能感兴趣的:(JAVA)