[英]Spring @Configuration and <context:component-scan />
[英]multiple packages in context:component-scan, spring config
如何在 spring-servlet.xml 文件中的context:component-scan
元素中添加多個包?
我試過了
<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:
以下方法是正確的:
<context:component-scan base-package="x.y.z.service, x.y.z.controller" />
請注意,錯誤抱怨xyzdao.daoservice.LoginDAO
,它不在上面提到的包中,也許您忘記添加它:
<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" />
注釋方法
@ComponentScan({ "x.y.z", "x.y.z.dao" })
您可以添加多個基本包(請參閱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"/>
將工作,因為其余的包是“xyz”的子包。 因此,您無需單獨提及每個包。
另一種通用的注解方法:
@ComponentScan(basePackages = {"x.y.z"})
延遲響應但要使用基於注釋的方法提供多個包,我們可以使用如下:
@ComponentScan({"com.my.package.one","com.my.package.subpackage.two","com.your.package.supersubpackage.two"})
如果 xyz 是通用包,那么您可以使用:
<context:component-scan base-package="x.y.z.*">
它將包括所有以 xyz 開頭的包,如:xyzcontroller、xyzservice 等。
例如,你有一個包“com.abc”,里面有多個包,你可以使用像
@ComponentScan("com.abc")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.