Две реализации одного интерфейса и внедрение по конструктору
В сервисе появилась вторая реализация интерфейса уведомлений:
@Service
class EmailNotifier implements Notifier { }
@Service
class SmsNotifier implements Notifier { }
@Service
class OrderService {
private final Notifier notifier;
OrderService(Notifier notifier) {
this.notifier = notifier;
}
}
Что произойдёт при запуске приложения?
- Приложение стартует: контейнер выберет бин, чьё имя совпадает по алфавиту первым
- Приложение стартует, а ошибка возникнет при первом вызове notifier во время обработки запроса
- Приложение не стартует: контейнер не может выбрать между двумя кандидатами, нужен @Primary или @Qualifier
- Приложение стартует: Spring внедрит обе реализации и будет вызывать их по очереди
