Несколько пакетов в контексте: компонентное сканирование, весенний конфиг

Как добавить несколько пакетов в файл 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")
Другие вопросы по тегам