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


185

如何在context:component-scanelement的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:

Answers:


271

以下方法是正确的:

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

5
这个答案意味着基本包的成员不存在递归: stackoverflow.com/questions/7774295/… 。我建议稍微改变一下答案以使其更清楚。
djangofan


43

您可以添加多个基本程序包(请参阅axtavt的answer),但是您也可以过滤基本程序包中扫描的内容:

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

2
@shams无需先生我,但如果答案是正确的,你应该将其标记为接受(点击复选标记)
肖恩·帕特里克·弗洛伊德

1
为什么不能添加多个基本软件包?例如“ org.example,com.example”?
Shervin Asgari 2014年


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

将起作用,因为其余的软件包都是“ xyz”的子软件包。因此,您无需单独提及每个程序包。


2
好!也许这是另一个原因,但是对于Spring Portlet来说,这对我不起作用...
elcadro

@elcadro一定是通过其他的原因,因为这是有据可查的,并标榜的功能
EIS

好吧,我不能说相反,因为很多人都在纠正我。我希望我能找到为什么这对我不起作用...无论如何,谢谢!
elcadro

即使对于基于注释的配置,它也适用吗?
Nikhil Sahu

6

另一种通用注释方法:

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

2

如果xyz是通用软件包,则可以使用:

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

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


1

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

@ComponentScan("com.abc")

0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.