java如何掃描本項目下的所有類

最近在寫一個依賴注入的小demo,碰到這麼樣的一個問題:

要把本項目下所有被@Component修飾的所有類注入到容器當中。

思路很簡單,通過文件枚舉的方式掃描出本項目的所有類文件,再對文件名進行一些小處理,就能得到本項目的所有類。

java如何掃描本項目下的所有類

其中,getClassPath這個方法的實現如下:

java如何掃描本項目下的所有類

就是通過類來取出這個類所在文件的絕對路徑,並進行一些文本處理。

而getClassesList則是根據傳入的類路徑,通過遞歸進行文件枚舉:

java如何掃描本項目下的所有類

遞歸函數:

java如何掃描本項目下的所有類

基本原理就是判斷file是否為目錄,如果是,繼續遞歸,否則如果文件是class文件,加入到list,返回。

那這樣,就能得到本項目下的所有類。

值得注意的是,這種方式不適用jar執行包,因為如果java直接執行jar包的話,第一步得到的類路徑就是jar包的地址。

所以如果最終運行的是jar包的話,必須通過jar輸入流進行讀取。


分享到:


相關文章: