如何在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:
答案 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"})