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

@Lazy для разрыва цикла

Вопрос

Что делает @Lazy на параметре конструктора A(@Lazy B b) в случае цикла A и B?

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

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

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

Коротко

Правильный ответ: Внедряет прокси B, который достанет бин при первом вызове. Вместо B в конструктор передаётся ленивый прокси, поэтому A создаётся без готового B, а реальный бин достаётся при первом обращении.

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

  1. Внедряет прокси B, который достанет бин при первом вызовеправильный ответ
  2. Создаёт A позже всех остальных бинов контекста
  3. Делает B prototype-бином, создаваемым по требованию
  4. Отключает проверку циклов во всём контексте приложения

Разбор

Вместо B в конструктор передаётся ленивый прокси, поэтому A создаётся без готового B, а реальный бин достаётся при первом обращении. Цикл формально разорван, но остаётся в дизайне, поэтому это временный обход. На порядок создания A, скоуп B и глобальную проверку циклов (allow-circular-references) аннотация не влияет.

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

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