SpringBoot 在測試時如何指定包的掃描范圍
在測試時如何指定包的掃描范圍
@SpringBootTest註解,在SpringBoot在啟動會根據主啟動類上的@SpringBootApplication去掃描當前類及其子包下的類.當出現子包中相同類名時,容器失敗.
可以通過為相同的類指定不同的ID解決,也可以通過在SpringBoot測試時指容器的包掃描范圍解決。
具體如下:
以往…這麼寫
@RunWith(SpringRunner.class) @SpringBootTest public class IocTest { /** 測試方法等... */ }
通過@SpringBootApplication註解配置容器的包掃描范圍
@RunWith(SpringRunner.class) @SpringBootApplication(scanBasePackages = "com.example.xxx") public class IocTest { /** 測試方法等... */ }
配置掃描包范圍
近期在學習java的spring框架,得知使用註解需要配置包掃描的范圍,然而在SpringBoot項目中的配置文件裡找不到如spring類似的配置
<context:component-scan base-package=”XX.XX”/>
經查閱資料SpringBoot其實有默認的包掃描機制,啟動類所在的當前包以及包的子類都會默認被掃描,所以新手在學習這個框架的時候,有時候可能因為bean和啟動類不在一個文件夾下導致掃描不到引起的註解失敗問題。
啟動類:項目的入口函數,一般命名規范是xxxApplication.java,並且帶有@SpringBootApplication的註解,也有我們常見的java中的main函數。
如何修改包掃描的位置?
方法一
在啟動類的SpringBootApplication註解中配置scanBasePackages即可,如下
@SpringBootApplication(scanBasePackages = "org.sang.service")
也可以配置多個包路徑
@SpringBootApplication(scanBasePackages = {"org.sang.bean","org.sang.service"})
方法二
在啟動類裡添加@ComponentScan註解配置basePackages
@ComponentScan(basePackages = {"org.sang.bean","org.sang.service"})
兩個配置方法選擇其一即可。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 解決Spring boot 整合Junit遇到的坑
- 解決springboot報錯找不到自動註入的service問題
- springboot啟動掃描不到dao層接口的解決方案
- springBoot mybatis 包掃描實例
- springboot 啟動如何排除某些bean的註入