Выбор ответа Senior IoC и внедрение зависимостей обновлено
ObjectProvider
Вопрос
Зачем внедрять ObjectProvider<Foo> вместо Foo?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтобы получить бин лениво и необязательно, через getIfAvailable(). ObjectProvider откладывает получение бина до вызова и позволяет обработать отсутствие или неоднозначность без падения контекста.
Варианты ответа
- Чтобы бин Foo стал потокобезопасным при параллельных вызовах
- Чтобы получить бин лениво и необязательно, через
getIfAvailable()правильный ответ - Чтобы Spring создал Foo через рефлексию без вызова конструктора
- Это устаревший API, который заменили на
@Autowired(required = false)
Разбор
ObjectProvider откладывает получение бина до вызова и позволяет обработать отсутствие или неоднозначность без падения контекста. Для prototype-бина каждый getObject() возвращает новый экземпляр: так решают проблему prototype внутри singleton. Потокобезопасность он не добавляет. Это современный API (Spring 4.3+), а не устаревший.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.