Встречается на собеседованиях • сегодня

Почему нужно ставить @Autowired над полем, а не над конструктором

Использование @Autowired над конструктором считается лучшей практикой, так как:

  1. Неизменяемость – поля можно сделать final, что гарантирует их инициализацию только при создании объекта.
  2. Тестируемость – явная передача зависимостей через конструктор упрощает мокирование в unit-тестах.
  3. Явность зависимостей – все зависимости видны сразу, а не скрыты за рефлексией.

Пример с конструктором:

java
@Service
public class UserService {
    private final UserRepository repository;

    @Autowired
    public UserService(UserRepository repository) {
        this.repository = repository;
    }
}

Полевой @Autowired менее предпочтителен из-за:

  • Скрытой зависимости (инъекция через рефлексию).
  • Невозможности сделать поле final.
  • Сложностей при ручном создании объекта.

Spring с версии 4.3+ автоматически инжектит через конструктор, если он один, даже без @Autowired.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы