上下文中的多个包:component-scan,spring config

时间:2011-03-11 05:50:19

标签: java spring component-scan

如何在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:

8 个答案:

答案 0 :(得分:254)

以下方法是正确的:

<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" /> 

答案 1 :(得分: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>

答案 2 :(得分:42)

注释方法

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

答案 3 :(得分:19)

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

将起作用,因为其余的包是“x.y.z”的子包。因此,您不需要单独提及每个包。

答案 4 :(得分:5)

另一种通用的注释方法:

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

答案 5 :(得分:2)

如果x.y.z是普通包,那么您可以使用:

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

它将包含以x.y.z开头的所有包,如: x.y.z.controller,x.y.z.service等。

答案 6 :(得分:1)

例如你有包“com.abc”并且里面有多个包,你可以使用像

@ComponentScan("com.abc")

答案 7 :(得分:0)

延迟响应,但要使用基于注释的方法提供多个软件包,我们可以如下使用:

@ComponentScan({"com.my.package.one","com.my.package.subpackage.two","com.your.package.supersubpackage.two"})