В моем веб-приложении на основе SpringMVC обычно используется 2 контекста: контекст веб-приложения для сервлета-диспетчера MVC и контекст родительского / корневого приложения.
<!-- the context for the dispatcher servlet -->
<servlet>
<servlet-name>webApp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
....
<!-- the context for the root/parent application context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:root-context.xml</param-value>
</context-param>
В этих контекстах я использую компонентное сканирование для загрузки всех bean-компонентов.Мои пакеты называются в соответствии с их вариантом использования (например, com.abc.registration, com.abc.login и т. Д.), А не на основе технологического уровня (например, com.abc.dao, com.abc.services и т. Д.)
Теперь мой вопрос: чтобы избежать дублирования сканирования некоторых классов, рекомендуется отфильтровывать классы компонентов-кандидатов для обоих контекстов, например включать только контроллер MVC для сканирования веб-контекста и включать все другие компоненты (сервисы,dao / repositorie) в контексте корневого приложения?
<!-- servlet-context.xml -->
<context:component-scan base-package="com.abc.myapp" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- root-context.xml -->
<context:component-scan base-package="de.efinia.webapp">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
Или это не важно и не необходимо избегать такого дублирования для сканирования компонентов?