研究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