Выбор ответа Junior IoC и внедрение зависимостей спрашивают часто обновлено
Почему внедрение через конструктор
Вопрос
Почему Spring рекомендует внедрять зависимости через конструктор?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Зависимости обязательны и final, тестировать можно без контейнера. Конструктор делает зависимости явными: без них объект не создать, поля можно объявить final, а в юнит-тесте достаточно new Service(mock).
Варианты ответа
- Только при внедрении через конструктор работает
@Transactional - Зависимости обязательны и
final, тестировать можно без контейнераправильный ответ - Внедрение через поле запрещено начиная со Spring 6 и выдаёт ошибку старта
- Конструктор вызывается позже, чем внедряются поля, и видит их все
Разбор
Конструктор делает зависимости явными: без них объект не создать, поля можно объявить final, а в юнит-тесте достаточно new Service(mock). Внедрение в поля работает и в Spring 6, просто хуже по этим причинам. @Transactional зависит от прокси, а не от способа внедрения. Поля при field injection заполняются после конструктора, но это не довод в пользу конструктора.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.