研究Spring扫包原理的时候,在网上查阅相关资料的时候,发现使用Reflections库能够实现扫包。java
Reflections 经过扫描 classpath,索引元数据,容许在运行时查询这些元数据,也能够保存收集项目中多个模块的元数据信息,值得一提的是,这东西在扫描的时候,连依赖的jar包都不放过。git
使用 Reflections 能够查询如下元数据信息:github
1)得到某个类型的全部子类型
2)得到标记了某个注解的全部类型/成员变量,支持注解参数匹配。
3)使用正则表达式得到全部匹配的资源文件
4)得到全部特定签名(包括参数,参数注解,返回值)的方法正则表达式
Reflections 依赖 Google 的 Guava 库和 Javassist 库。spa
Maven 项目导入.net
<dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.11</version> </dependency>
一般用法:code
Reflections reflections = new Reflections("com.my", new SubTypesScanner(false)); Set<Class<? extends T>> subTypesOf = reflections.getSubTypesOf(T.class); Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(T.class);
Reflections还有不少相似的反射类操做(如扫描方法、扫描参数等),能够说是应有尽有了。有兴趣的小伙伴们能够参考Reflection库的源码或者官方文档,这里就不详述了。xml