2011-03-11 56 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")