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:
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" />
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>
Approche d'annotation
@ComponentScan({ "x.y.z", "x.y.z.dao" })
<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.
Une autre approche d’annotation générale:
@ComponentScan(basePackages = {"x.y.z"})
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.
Par exemple vous avez le paquet "com.abc" et vous avez plusieurs paquets dedans, vous pouvez utiliser comme
@ComponentScan("com.abc")