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(new ConfigurationBuilder().forPackages(basePackages).addScanners(new SubTypesScanner()).addScanners(new FieldAnnotationsScanner())); // 获取某个包下类型注解对应的类 Set<Class<?>> typeClass = reflections.getTypesAnnotatedWith(RpcInterface.class, true); // 获取子类 Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeType.class); // 获取注解对应的方法 Set<Method> resources =reflections.getMethodsAnnotatedWith(SomeAnnotation.class); // 获取注解对应的字段 Set<Field> ids = reflections.getFieldsAnnotatedWith(javax.persistence.Id.class); // 获取特定参数对应的方法 Set<Method> someMethods = reflections.getMethodsMatchParams(long.class, int.class); Set<Method> voidMethods = reflections.getMethodsReturn(void.class); Set<Method> pathParamMethods =reflections.getMethodsWithAnyParamAnnotated(PathParam.class); // 获取资源文件 Set<String> properties = reflections.getResources(Pattern.compile(".*\\.properties"));