несколько пакетов в контексте: компонентное сканирование, весенний конфиг - PullRequest
175 голосов
/ 11 марта 2011

Как добавить несколько пакетов в файл spring-servlet.xml в элементе context:component-scan?

Я пробовал

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

Ответы [ 7 ]

258 голосов
/ 11 марта 2011

Правильный следующий подход:

<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" /> 
44 голосов
/ 28 марта 2014

Подход к аннотации

@ComponentScan({ "x.y.z", "x.y.z.dao" })
42 голосов
/ 11 марта 2011

Вы можете добавить несколько базовых пакетов (см. ответ axtavt ), но вы также можете отфильтровать то, что отсканировано внутри базового пакета:

<context:component-scan base-package="x.y.z">
   <context:include-filter type="regex" expression="(service|controller)\..*"/>
</context:component-scan>
19 голосов
/ 24 ноября 2011
<context:component-scan base-package="x.y.z"/>

будет работать, так как остальные пакеты являются подпакетами "xyz".Таким образом, вам не нужно указывать каждый пакет отдельно.

5 голосов
/ 06 июля 2016

Другой общий подход к аннотации:

@ComponentScan(basePackages = {"x.y.z"})
2 голосов
/ 16 декабря 2016

Если xyz является общим пакетом, вы можете использовать:

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

, он будет включать в себя весь пакет, начинающийся с xyz, например: xyzcontroller, xyzservice и т. Д.

1 голос
/ 08 февраля 2017

Например, у вас есть пакет "com.abc", и у вас есть несколько пакетов внутри него, вы можете использовать как

@ComponentScan("com.abc")
...