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。

推薦閱讀: