上下文中的多个包: 组件扫描,弹簧配置

如何在 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:
267698 次浏览

您可以添加多个基本包(参见 Axtavt 的回答) ,但也可以在基本包内部添加 过滤扫描的内容:

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

以下方法是正确的:

<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" />
<context:component-scan base-package="x.y.z"/>

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

注释方法

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

另一种通用的注释方法:

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

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

<context:component-scan base-package="x.y.z.*">
它将包含以 x.y.z 开头的所有包,比如: X.y.z.controller,x.y.z.service 等

例如,您有一个包“ com.abc”,并且其中包含多个包

@ComponentScan("com.abc")

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

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