Подтвердить что ты не робот

Несколько пакетов в контексте: компонент-сканирование, spring config

Как добавить несколько пакетов в файл 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:
4b9b3361

Ответ 1

Правильный подход:

<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" /> 

Ответ 2

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

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

Ответ 3

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

@ComponentScan({ "x.y.z", "x.y.z.dao" })

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

он будет включать весь пакет, который начинается с x.y.z, например: x.y.z.controller, x.y.z.service и т.д.

Ответ 7

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

@ComponentScan ( "com.abc" )