Spring middle

Какой DI лучше?

Ответ

Constructor injection. Поля можно final, явно видны зависимости, легко тестировать без контекста (new Service(mockRepo)), невозможен циклический DI при старте (сигнал о проблеме в дизайне). С Spring 4 при единственном конструкторе @Autowired можно не писать.

Разбор: Constructor injection даёт final-поля, явный список обязательных зависимостей, лёгкое тестирование через new и раннее обнаружение циклов. Field injection прячет зависимости и мешает тестам без рефлексии; setter injection не даёт final и не исключает циклы (как раз наоборот, разрывает их в ущерб надёжности); @Resource — это лишь стратегия резолва по имени, к выбору способа внедрения и к immutable-полям отношения не имеет.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться