在使用springboot搭建項目時,可能會遇到scanBasePackages無法讀取子包的問題。本文將從幾個方面詳細闡述如何解決這個問題。
一、問題描述
在使用Springboot創建項目時,我們可以在啟動類中使用註解@SpringBootApplication啟動spring容器,如果啟動類存在於根目錄下,spring容器會默認掃描根目錄以及子包下的所有java類。
但是在有時候,我們在啟動類的同級目錄下創建了一個子包,裡面放置了一些需要使用@Component註解進行依賴注入的類,如果只使用@SpringBootApplication啟動spring容器是無法掃描到子包下的類的。
二、解決方案
1、手動添加掃描路徑
解決辦法是在@SpringBootApplication註解中添加scanBasePackages屬性,手動將需要掃描的目錄進行指定。例如:
@SpringBootApplication(scanBasePackages = {"com.example.demo", "com.example.demo.subpack"})
這樣就可以將子包中的類也進行掃描,達到我們的需求。
2、使用@ComponentScan掃描
使用@ComponentScan掃描也可以達到同樣的效果,只需要在啟動類上添加@ComponentScan註解,並指定需要掃描的目錄即可。例如:
@ComponentScan(basePackages={"com.example.demo", "com.example.demo.subpack"})
三、注意事項
1、路徑名一定要寫對
在手動添加掃描路徑和使用@ComponentScan註解掃描時,一定要記得將路徑名寫對,尤其是包名。路徑名寫錯了,結果是發現子包依然無法掃描到。
2、在需要注入的類上加註解
在使用@Component、@Service等進行自動注入時,需要將註解加在需要注入的類上,而不是介面上。
四、總結
本文介紹了在springboot中使用scanBasePackages讀取不到子包的問題,以及兩種解決方法。同時也提到了在使用註解自動注入時需要注意的問題。希望能對大家解決類似問題有所幫助。
原創文章,作者:JNZCN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/373130.html