最近在寫一個依賴注入的小demo,碰到這麼樣的一個問題:
要把本項目下所有被@Component修飾的所有類注入到容器當中。
思路很簡單,通過文件枚舉的方式掃描出本項目的所有類文件,再對文件名進行一些小處理,就能得到本項目的所有類。
![java如何掃描本項目下的所有類](http://p2.ttnews.xyz/loading.gif)
其中,getClassPath這個方法的實現如下:
![java如何掃描本項目下的所有類](http://p2.ttnews.xyz/loading.gif)
就是通過類來取出這個類所在文件的絕對路徑,並進行一些文本處理。
而getClassesList則是根據傳入的類路徑,通過遞歸進行文件枚舉:
遞歸函數:
基本原理就是判斷file是否為目錄,如果是,繼續遞歸,否則如果文件是class文件,加入到list,返回。
那這樣,就能得到本項目下的所有類。
值得注意的是,這種方式不適用jar執行包,因為如果java直接執行jar包的話,第一步得到的類路徑就是jar包的地址。
所以如果最終運行的是jar包的話,必須通過jar輸入流進行讀取。
閱讀更多 最後一個NPE 的文章