web-dev-qa-db-ja.com

コンテキスト内の複数のパッケージ:component-scan、spring config

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:
174
Shams

次の方法が正しいです。

<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" /> 
256
axtavt

複数の基本パッケージを追加することができます( axtavtの回答 を参照)。ただし、基本パッケージ内に スキャン対象をフィルタリングする することもできます。

<context:component-scan base-package="x.y.z">
   <context:include-filter type="regex" expression="(service|controller)\..*"/>
</context:component-scan>
42

アノテーションアプローチ

@ComponentScan({ "x.y.z", "x.y.z.dao" })
42
biology.info
<context:component-scan base-package="x.y.z"/>

残りのパッケージは "x.y.z"のサブパッケージなので動作します。したがって、各パッケージを個別に言及する必要はありません。

19
Irene

別の一般的な注釈アプローチ

@ComponentScan(basePackages = {"x.y.z"})
5
Robocide

X.y.zが共通パッケージの場合は、次のものを使用できます。

<context:component-scan base-package="x.y.z.*">

x.y.z.controller、x.y.z.serviceなど、x.y.zで始まるすべてのパッケージが含まれます。

2
Amit Sharma

たとえば、パッケージ "com.abc"があり、その中に複数のパッケージがある場合は、次のように使用できます。

@ComponentScan("com.abc")
1
sForSujit