上下文中的多个包:组件扫描,弹簧配置
Posted
技术标签:
【中文标题】上下文中的多个包:组件扫描,弹簧配置【英文标题】:multiple packages in context:component-scan, spring config 【发布时间】:2011-07-13 06:30:03 【问题描述】:如何在 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:
【问题讨论】:
【参考方案1】:延迟响应但使用基于注释的方法提供多个包,我们可以使用如下:
@ComponentScan("com.my.package.one","com.my.package.subpackage.two","com.your.package.supersubpackage.two")
【讨论】:
【参考方案2】:例如,你有包“com.abc”,里面有多个包,你可以像这样使用
@ComponentScan("com.abc")
【讨论】:
【参考方案3】:另一种通用的Annotation方法:
@ComponentScan(basePackages = "x.y.z")
【讨论】:
【参考方案4】:如果 x.y.z 是通用包,那么您可以使用:
<context:component-scan base-package="x.y.z.*">
它将包括所有以 x.y.z 开头的包,例如: x.y.z.controller、x.y.z.service等
【讨论】:
【参考方案5】:您可以添加多个基础包(参见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>
【讨论】:
@shams 不需要告诉我,但如果答案是正确的,您应该将其标记为已接受(单击复选标记) 为什么不能添加多个基础包?比如“org.example, com.example”? @Shervin 你可以。和你写的完全一样。 "Alternatively, you can specify a comma-separated list that includes the parent package of each class."(另见预期答案)【参考方案6】:注解方法
@ComponentScan( "x.y.z", "x.y.z.dao" )
【讨论】:
如果我们只定义***包,我们是否强制需要添加特定包或者它可以自动扫描子包? @NikhilSahu 不,这是递归扫描(春季 3 >) 更多信息的链接:***.com/questions/10794587/…【参考方案7】:<context:component-scan base-package="x.y.z"/>
将起作用,因为其余的包是“x.y.z”的子包。因此,您无需单独提及每个包。
【讨论】:
好的!也许这是另一个原因,但这对我来说对 portlet 的 spring mvc 不起作用...... @elcadro 一定是因为其他原因,因为这是有据可查和宣传的功能 好吧,我不能说相反,因为很多人都在纠正我。我希望我能找到为什么这对我不起作用......无论如何,谢谢! 即使对于基于注释的配置也适用吗?【参考方案8】:以下做法是正确的:
<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" />
【讨论】:
这个答案意味着 base-package 的成员没有递归,但有:***.com/questions/7774295/…。我建议稍微改变一下答案以明确这一点。以上是关于上下文中的多个包:组件扫描,弹簧配置的主要内容,如果未能解决你的问题,请参考以下文章