Выбор ответа Junior IoC и внедрение зависимостей спрашивают часто обновлено

Два бина одного типа

Вопрос

Есть две реализации Notifier: EmailNotifier и SmsNotifier, обе @Component. Что произойдёт при внедрении Notifier в конструктор без уточнений, если имя параметра не совпадает с именем ни одного бина?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Старт упадёт с NoUniqueBeanDefinitionException. Spring не угадывает: при нескольких кандидатах без @Primary, @Qualifier или совпадения имени параметра контекст не стартует с NoUniqueBeanDefinitionException.

Варианты ответа

  1. Внедрится первая найденная при сканировании реализация
  2. Внедрится случайная реализация из двух подходящих
  3. Старт упадёт с NoUniqueBeanDefinitionExceptionправильный ответ
  4. Внедрится null, а ошибка будет при первом вызове

Разбор

Spring не угадывает: при нескольких кандидатах без @Primary, @Qualifier или совпадения имени параметра контекст не стартует с NoUniqueBeanDefinitionException. Порядок сканирования не используется для выбора, null без required = false или Optional тоже не внедряется.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.