解決SpringBoot引用別的模塊無法註入的問題
引用別的模塊無法註入的問題
前段時間嘗試著利用空閑時間搭建瞭一個IIM消息通信系統,目前還是Demo級別,具體實現還在不斷補充,在開發過程中遇到瞭一個小問題,在此分享出來,猛男請忽略。
問題描述
由於前期搭建的比較匆忙,擱那狂寫調用邏輯,沒註意自己的包名有點奇怪。
目前是分為這三個模塊,客戶端,公共處理模塊,服務端,不過我正在琢磨著給這玩意再整個路由註冊中心,便於客戶端和服務端的橫向拓展。
目前我server子模塊的包名和common子模塊的包路徑如下
我在service包裡的類裡引用common包下的公共類時,發現無法註入我的消息分發器公共類;
emmmmm…以前自己配置過XML的包掃描,沒試過註解的掃描。
解決方法
1.在啟動類**@SpringBootApplication**加參數 ,掃描指定的包
@SpringBootApplication(scanBasePackages = {“com.zhl.dispatcher”,“server.server”})
這裡也包括其他模塊的包,掃描到包及子包的類。加載進Spring的容器當中。
2.新增註解
@ComponentScan(value = {“com.zhl.dispatcher”,“server.server”})
第二種其實這個註解是有些多餘,@SpringBootApplication本身就已經包含掃描包路徑的屬性瞭,不過這兩種方法都可以用哦
多模塊項目中無法註入其他模塊的spring bean
在一個springboot項目中創建瞭一個common模塊,一個admin模塊,
在admin模塊中引入common模塊依賴,發現無法註入common模塊中的bean,idea提示無法找到bean。
瞎忙活一晚上,最後發現是兩個模塊路徑不同意,一個是com.example.common,另一個是com.example.admin。
這是因為springboot的@SpringBootApplication註解默認掃描范圍為自己的啟動類所在的包(com.example.admin)及其子包,所以此時模塊admin並沒有掃描到模塊common的bean,那麼自然無法在模塊admin中註入模塊common的Service類。
最後:
方法一:都改成com.example就好瞭。
方法二:手動修改成導入多個包,@SpringBootApplication(scanBasePackages = {“com.example.admin”, “com.example.common”})
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringBoot 在測試時如何指定包的掃描范圍
- spring IOC控制反轉原理詳解
- springboot bean掃描路徑的實現
- Springboot常用註解及配置文件加載順序詳解
- 解決springboot報錯找不到自動註入的service問題