ComponentScan в Spring

0
28 окт 2016 10:38
Возник такой вопрос. Пишу проект на спринг буте. Сборщик мавен. Проект многомодульный, отдельный модуль с сервисами, отдельный с репозиториями и т.д. Есть несколько исполняемых модулей. Каждый может зависеть от нескольких сервисов. Сервисы помечены аннотацией @Service. Если я указываю в ComponentScan корневой пакет, например, com.my.project, то к исполняемому модулю подцепятся все просканированные компоненты, включая лишние сервисы, репы, контроллеры и т.д.
Как правильно этого избежать? Т.е. указать только то, что реально нужно, при этом из 7 сервисов нужно только 2, например.
Возникла мысль делать так:
@ComponentScan(
    basePackages = {"com.my.project"},
    excludeFilters = @ComponentScan.Filter(
        type = FilterType.REGEX,
        pattern = {"com.my.project.service.*", "com.my.project.resource.*", ......}
    )
)

Но здесь придется перечислять много исключаемых пакетов. Или наоборот в basePackages указывать только те, которые требуются - но тогда их опять же много указать нужно. В общем не соображу как красиво и просто подключать то что нужно.

Ответов: 2

0
28 окт 2016 20:46
Не используй component scan если не хочешь фильтры/исключения писать, объявляй бины явно с помощью XML (<bean>) либо с помощью Java (@Bean). Component Scan в принципе отвратительная штука и усложняет поддержку и понимание проекта.
0
28 окт 2016 17:51
можно же в @ComponentScan фильтр указать, в том числе собственноручно написанный, там и реализуешь сколь угодно красивую фильтрацию
Модераторы: Нет
Сейчас эту тему просматривают: Нет