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

В чем разница между @Inject в конструкторе и @Inject над полем в Spring

@Inject (или @Autowired) в конструкторе предпочтительнее, так как:

  1. Неизменяемость – поля можно сделать final, гарантируя инициализацию при создании.
  2. Тестируемость – проще передавать зависимости вручную в тестах.
  3. Циклические зависимости – Spring явно сообщит о проблеме на этапе запуска.

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

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

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

@Inject над полем:

java
@Service
public class UserService {
    @Inject
    private UserRepository repository;
}

Минусы field injection:

  • Зависимости скрыты (нет явного конструктора).
  • Невозможно сделать поле final.
  • Сложнее тестировать (нужен Spring-контекст или рефлексия).

Spring рекомендует конструкторный инъекшн для обязательных зависимостей.

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

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

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

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