Лучший способ указать автопровода кандидата на профиль
В моем весеннем загрузочном приложении для некоторых интерфейсов у меня есть несколько реализаций (обычно "основная реализация" и "реализация для локального тестирования"), которые я использую с разными профилями. Я знаю несколько вариантов, чтобы сказать Spring использовать конкретную реализацию.
- добавлять
@Profile
/@Conditional
в класс с пометкой@Component
, Плюсы: легко. Минусы: мне не нравится тот факт, что информация о профилях разбросаны по компонентам. - Удалить
@Component
аннотация от реализации и создания компонентов в профиле@Configuration
(@Bean SomeService() { return new DefaultSomeService(); }
). Плюсы: требуется больше кода. Cons. Все профильные компоненты расположены в одном месте. - исключать
@Component
от@ComponentScan
(добавив явную пользовательскую аннотацию@IgnoreComponentScan
в реализации для предотвращения неоднозначности) и создания компонентов в профильном профиле @Configuration. Близко ко второму варианту, но дает больше ясности для компонента (мы можем сохранить@Repository
/@Service
аннотаций)
Есть ли другие варианты? Какой способ больше подходит?