Несколько пакетов в контексте: компонент-сканирование, 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:
Ответы
Ответ 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" )