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:
次の方法が正しいです。
<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" />
複数の基本パッケージを追加することができます( axtavtの回答 を参照)。ただし、基本パッケージ内に スキャン対象をフィルタリングする することもできます。
<context:component-scan base-package="x.y.z">
<context:include-filter type="regex" expression="(service|controller)\..*"/>
</context:component-scan>
アノテーションアプローチ
@ComponentScan({ "x.y.z", "x.y.z.dao" })
<context:component-scan base-package="x.y.z"/>
残りのパッケージは "x.y.z"のサブパッケージなので動作します。したがって、各パッケージを個別に言及する必要はありません。
別の一般的な注釈アプローチ
@ComponentScan(basePackages = {"x.y.z"})
X.y.zが共通パッケージの場合は、次のものを使用できます。
<context:component-scan base-package="x.y.z.*">
x.y.z.controller、x.y.z.serviceなど、x.y.zで始まるすべてのパッケージが含まれます。
たとえば、パッケージ "com.abc"があり、その中に複数のパッケージがある場合は、次のように使用できます。
@ComponentScan("com.abc")