2011-03-11 57 views
149

如何在context:component-scan元素的spring-servlet.xml文件中添加多個包?上下文中的多個包:組件掃描,彈性配置

我已經試過

<context:component-scan base-package="z.y.z.service" base-package="x.y.z.controller" /> 

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

<context:component-scan base-package="x.y.z.service" /> 
<context:component-scan base-package="x.y.z.controller" /> 

,但得到的錯誤:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [x.y.z.dao.daoservice.LoginDAO] found for dependency: 

回答

217

下面的辦法是正確的:

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

注意,錯誤抱怨x.y.z.dao.daoservice.LoginDAO,這是不是在上面提到的包,也許你忘了添加它:

<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" /> 
+0

是的,這麼認爲(+1) – 2011-03-11 13:25:45

+4

這個答案意味着沒有遞歸的基礎包的成員但是那裏是:http://stackoverflow.com/questions/7774295/spring-xml-file-configuration-hierarchy-help-explanation/7774597#7774597。我會建議稍微修改一下這個答案,以便說清楚。 – djangofan 2015-10-27 17:59:44

42

呦ü可以添加多個基本包(見axtavt's answer),但你也可以filter what's scanned基本包內:

<context:component-scan base-package="x.y.z"> 
    <context:include-filter type="regex" expression="(service|controller)\..*"/> 
</context:component-scan> 
+0

謝謝主席先生,現在它正在 – Shams 2011-03-11 06:09:52

+2

@shams無需先生我,但如果答案正確,則應將其標記爲已接受(單擊對號) – 2011-03-11 06:57:35

+1

爲什麼不能添加多個基本包?像例如「org.example,com.example」? – 2014-01-17 13:12:16

16
<context:component-scan base-package="x.y.z"/> 

將工作,因爲其餘的軟件包是「x.y.z」的子軟件包。因此,你不需要單獨提及每個包裝。

+0

我覺得有點不對...... – elcadro 2013-01-25 12:16:39

+25

@elcadro你覺得不對勁 – NimChimpsky 2013-04-27 17:50:27

+2

好吧!也許這是另一個原因,但這對我來說並不適用於Spring MVC for portlets ... – elcadro 2013-04-29 06:27:43

31

註解方法

@ComponentScan({ "x.y.z", "x.y.z.dao" }) 
+0

我們是否強制需要添加特定軟件包,或者如果我們只定義頂層軟件包,它可以自動掃描子軟件包? – 2016-06-17 13:52:53

+0

@NikhilSahu nope,這是一個遞歸掃描(Spring 3>) – 2016-06-17 14:38:40

4

另一個一般註釋的方法:

@ComponentScan(basePackages = {"x.y.z"}) 
0

如果xyz是常見的包,那麼你可以使用:

<context:component-scan base-package="x.y.z.*"> 

這將包括所有的包從xyz開始,如: xyzcontroller,xyzservice等

0

比如你有包「com.abc」,你在它裏面多個包,你可以像使用

@ComponentScan("com.abc")