web-dev-qa-db-fra.com

plusieurs paquets en contexte: composant-scan, spring config

Comment ajouter plusieurs paquets dans le fichier spring-servlet.xml dans l'élément context:component-scan?

J'ai essayé

<context:component-scan base-package="z.y.z.service" base-package="x.y.z.controller" />

et

<context:component-scan base-package="x.y.z.service, x.y.z.controller" />

et

<context:component-scan base-package="x.y.z.service" />
<context:component-scan base-package="x.y.z.controller" />

mais j'ai eu une erreur:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [x.y.z.dao.daoservice.LoginDAO] found for dependency:
167
Shams

L'approche suivante est correcte:

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

Notez que l'erreur se plaint de x.y.z.dao.daoservice.LoginDAO, qui ne figure pas dans les packages mentionnés ci-dessus. Vous avez peut-être oublié de l'ajouter:

<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" /> 
248
axtavt

Vous pouvez ajouter plusieurs packages de base (voir la réponse de axtavt ), mais vous pouvez également filtrer ce qui est analysé dans le package de base:

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

Approche d'annotation

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

fonctionnera puisque les autres paquets sont des sous-paquets de "x.y.z". Ainsi, vous n'avez pas besoin de mentionner chaque paquet individuellement.

19
Irene

Une autre approche d’annotation générale:

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

Si x.y.z est le paquet commun, vous pouvez utiliser:

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

il inclura tous les paquets qui commencent par x.y.z comme: x.y.z.controller, x.y.z.service etc.

1
Amit Sharma

Par exemple vous avez le paquet "com.abc" et vous avez plusieurs paquets dedans, vous pouvez utiliser comme

@ComponentScan("com.abc")
0
sForSujit