Выбор ответа Middle IoC и внедрение зависимостей обновлено

Циклическая зависимость через конструкторы

Вопрос

A(B b) и B(A a), оба бина синглтоны с внедрением через конструктор. Что будет в Spring Boot 3?

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

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

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

Коротко

Правильный ответ: Старт упадёт: BeanCurrentlyInCreationException. Чтобы создать A, нужен готовый B, а для B нужен A: при внедрении через конструкторы разорвать цикл нельзя, и Spring падает с описанием цикла.

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

  1. Spring создаст прокси для одного из бинов, и всё заработает
  2. Один из параметров конструктора получит null
  3. Старт упадёт: BeanCurrentlyInCreationExceptionправильный ответ
  4. Spring создаст бины в порядке объявления и сам разорвёт цикл

Разбор

Чтобы создать A, нужен готовый B, а для B нужен A: при внедрении через конструкторы разорвать цикл нельзя, и Spring падает с описанием цикла. Прокси автоматически не создаются (только если вы поставите @Lazy на параметр). Null не внедряется. Решение: пересмотреть дизайн и вынести общую часть в отдельный бин.

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

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