Выбор ответа Senior IoC и внедрение зависимостей обновлено
@Lazy для разрыва цикла
Вопрос
Что делает @Lazy на параметре конструктора A(@Lazy B b) в случае цикла A и B?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Внедряет прокси B, который достанет бин при первом вызове. Вместо B в конструктор передаётся ленивый прокси, поэтому A создаётся без готового B, а реальный бин достаётся при первом обращении.
Варианты ответа
- Внедряет прокси B, который достанет бин при первом вызовеправильный ответ
- Создаёт A позже всех остальных бинов контекста
- Делает B prototype-бином, создаваемым по требованию
- Отключает проверку циклов во всём контексте приложения
Разбор
Вместо B в конструктор передаётся ленивый прокси, поэтому A создаётся без готового B, а реальный бин достаётся при первом обращении. Цикл формально разорван, но остаётся в дизайне, поэтому это временный обход. На порядок создания A, скоуп B и глобальную проверку циклов (allow-circular-references) аннотация не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.