Встречается на собеседованиях • сегодня
Почему нужно ставить @Autowired над полем, а не над конструктором
Использование @Autowired над конструктором считается лучшей практикой, так как:
- Неизменяемость – поля можно сделать
final, что гарантирует их инициализацию только при создании объекта. - Тестируемость – явная передача зависимостей через конструктор упрощает мокирование в unit-тестах.
- Явность зависимостей – все зависимости видны сразу, а не скрыты за рефлексией.
Пример с конструктором:
java
@Service
public class UserService {
private final UserRepository repository;
@Autowired
public UserService(UserRepository repository) {
this.repository = repository;
}
}Полевой @Autowired менее предпочтителен из-за:
- Скрытой зависимости (инъекция через рефлексию).
- Невозможности сделать поле
final. - Сложностей при ручном создании объекта.
Spring с версии 4.3+ автоматически инжектит через конструктор, если он один, даже без @Autowired.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы