基於SpringBoot多模組專案引入其他模組時@Autowired無法注入的問題
阿新 • • 發佈:2021-01-10
1.1 Bug場景:
1.1 啟動Spring Boot專案時報 NoSuchBeanDefinitionExpetion 沒有找到bean的例項,即spring沒有例項化物件,也就無法根據配置檔案執行依賴注入依賴錯誤
2.1 Bug原因:
假設模組A需要引入模組B的依賴,並且需要注入模組B中的TestService物件。
第一步,需要在A的pom檔案中引入B模組的依賴:
<dependency> <groupId>com.example</groupId> <artifactId>module-b</artifactId> <version>1.0</version> </dependency>
第二步:在A中的測試類中注入B的TestService物件:
@Autowired private TestService testService;
第三步:並且呼叫 TestService 的方法:
testService.test();
測試程式碼提示會報錯:
在pom檔案中引入需要模組的依賴後,在啟動類掃描時掃描不到該依賴。這是因為模組A的@SpringBootApplication註解預設掃描範圍為A的啟動類所在的包(com.example.modulea)及其子包,所以此時模組A並沒有掃描到模組B的包,那麼自然無法在模組A中注入模組B的Service類。
3.1 解決方法:
1. 如果兩個模組的包路徑相同,只需要擴大包掃描範圍
2. 如果兩個模組的包路徑不相同,加入引入依賴的包