Spring boot裏類的掃描

spring boot裏,掃描的class對象是用註解@ComponentScan(未指定的情況下默認是main函數所在package)來指定的。

然後通過類ComponentScanAnnotationParser來讀取這些packages,交給ClassPathScanningCandidateComponentProvider來掃描這些類,找到package下所有類的活默認是由PathMatchingResourcePatternResolver來完成的,其實最終還是有jdk裏ClassLoader類的getResources方法來做。

這個getResources方法有個path參數,就是指定目錄的,如果爲空字符或者".",找的是classpath的跟路徑,如果指定了路徑名,會尋找classpath的路徑還有jar文件。

PathMatchingResourcePatternResolver就是通過去遞歸classpath路徑來找所有類的,而對於jar,找到類所屬jar文件後,用JarFile類便可以讀取文件裏所有的類。

 

對於第三方的包,spring boot是不會主動去掃描的,如果第三方包裏有想向spring註冊的bean的話,在META-INF目錄下放置一個spring.factories的文件,用org.springframework.boot.autoconfigure.EnableAutoConfiguration來指定一個配置類就可以了。

發佈了151 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章