plusieurs paquets dans leur contexte: component-scan, spring config
Comment puis-je ajouter plusieurs paquets dans spring-servlet.fichier 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 suis d'erreur:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [x.y.z.dao.daoservice.LoginDAO] found for dependency:
7 réponses
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 n'est pas dans les paquets mentionnés ci-dessus, peut-être avez-vous 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 paquets de base (voir réponse d'axtavt ), mais vous pouvez aussi filtrer ce qui est scanné à l'intérieur du paquet de base:
<context:component-scan base-package="x.y.z">
<context:include-filter type="regex" expression="(service|controller)\..*"/>
</context:component-scan>
Annotation Approche
@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:
@ComponentScan(basePackages = {"x.y.z"})
si X. Y. z est le paquet commun alors vous pouvez utiliser:
<context:component-scan base-package="x.y.z.*">
il comprendra tout le paquet qui commence par X. Y. Z comme: x.Y. z. contrôleur, X. Y. z. service etc.
par exemple, vous avez le paquet" com.abc" et vous avez plusieurs paquets à l'intérieur, vous pouvez utiliser comme
@ComponentScan("com.abc")