簡體   English   中英

上下文中的多個包:組件掃描,彈簧配置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM