194

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

8 回答 8

286

以下方法是正确的:

<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" /> 
于 2011-03-11T09:37:22.953 回答
56

注释方法

@ComponentScan({ "x.y.z", "x.y.z.dao" })
于 2014-03-28T16:21:15.897 回答
44

您可以添加多个基本包(请参阅axtavt 的答案),但您也可以过滤基本包内扫描的内容:

<context:component-scan base-package="x.y.z">
   <context:include-filter type="regex" expression="(service|controller)\..*"/>
</context:component-scan>
于 2011-03-11T06:03:31.003 回答
20
<context:component-scan base-package="x.y.z"/>

将工作,因为其余的包是“xyz”的子包。因此,您不需要单独提及每个包。

于 2011-11-24T00:06:07.187 回答
6

另一种通用的注释方法:

@ComponentScan(basePackages = {"x.y.z"})
于 2016-07-06T11:12:26.563 回答
5

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

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

于 2019-12-05T17:33:45.463 回答
2

如果 xyz 是通用包,那么您可以使用:

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

它将包括所有以 xyz 开头的包,例如:xyzcontroller、xyzservice 等。

于 2016-12-16T04:45:48.757 回答
1

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

@ComponentScan("com.abc")
于 2017-02-08T06:36:52.843 回答