Несколько пакетов в контексте: компонентное сканирование, весенний конфиг
Как добавить несколько пакетов в файл 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 ответов
Следующий подход является правильным:
<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" />
Аннотационный подход
@ComponentScan({ "x.y.z", "x.y.z.dao" })
Вы можете добавить несколько базовых пакетов (см . Ответ axtavt), но вы также можете отфильтровать то, что сканируется внутри базового пакета:
<context:component-scan base-package="x.y.z">
<context:include-filter type="regex" expression="(service|controller)\..*"/>
</context:component-scan>
<context:component-scan base-package="x.y.z"/>
будет работать, так как остальные пакеты являются подпакетами "xyz". Таким образом, вам не нужно упоминать каждый пакет в отдельности.
Другой общий подход к аннотации:
@ComponentScan(basePackages = {"x.y.z"})
Отложенный ответ, но для предоставления нескольких пакетов с использованием подхода на основе аннотаций мы можем использовать следующее:
@ComponentScan({"com.my.package.one","com.my.package.subpackage.two","com.your.package.supersubpackage.two"})
Если xyz является общим пакетом, то вы можете использовать:
<context:component-scan base-package="x.y.z.*">
он будет включать в себя весь пакет, который начинается с xyz, например: xyzcontroller,xyzservice и т. д.
Например, у вас есть пакет "com.abc", и у вас есть несколько пакетов внутри него, вы можете использовать как
@ComponentScan("com.abc")