2011-07-24 77 views
13

我正在使用Spring,並且我有一長串子包,我必須在<context:component-scan>標記中逐一指定它們嗎?在<context:component-scan>中包含子包的語法是什麼?

<context:component-scan base-package="com.fooapp.mainpackage, 
com.fooapp.mainpackage.subpackage1, 
com.fooapp.mainpackage.subpackage2, 
com.fooapp.mainpackage.subpackage3" /> 

回答

20

組件掃描支持包層級,所以這應該工作:

<context:component-scan base-package="com.fooapp.mainpackage"/> 

這是很容易和更快地驗證自己 - 你嘗試了嗎?

+2

非常真實,但如果您想基於圖層進行區分,則您始終可以對其他圖層執行'等操作一個想法 – Rachel

+0

基於這個文檔[Spring Beans and dependency injection](https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-spring-beans-and-dependency-injection .html),因此我們需要將我們的代碼(我們希望將它們注入到IoC容器中)放入根包中。 – Kramer

3

另外我會在默認情況下補充一點,類註解爲@Component@Repository@Service@Controller,或自定義本身使用了@Component註解是唯一檢測到的候選成分標註。

您可以通過應用是include-filterexclude-filter

例如自定義過濾器更改此行爲:

<context:component-scan base-package="com.vanilla"> 
     <context:exclude-filter 
       type="annotation" 
       expression="org.springframework.stereotype.Repository"/> 
</context:component-scan> 

這將排除所有的@Repository註解。

相關問題