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

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/…。我建议稍微改变一下答案以明确这一点。

以上是关于上下文中的多个包:组件扫描,弹簧配置的主要内容,如果未能解决你的问题,请参考以下文章

3.Spring配置可选方案

spring-装配

spring的装配

从单独的上下文访问弹簧上下文

关闭或停止后重新加载弹簧上下文

React Native Context,如何在多个嵌套文件和组件之间共享上下文