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

В чем разница между внедрением зависимости через конструктор и через сеттер

Основное отличие - момент внедрения и иммутабельность:

Через конструктор:

  • Зависимости задаются при создании объекта
  • Объект становится immutable (если поля final)
  • Гарантирует, что объект всегда в валидном состоянии
  • Лучше для обязательных зависимостей
java
class Service {
    private final Repository repo;
    
    public Service(Repository repo) {
        this.repo = repo;
    }
}

Через сеттер:

  • Позволяет менять зависимости после создания
  • Подходит для опциональных зависимостей
  • Делает класс mutable
  • Требует проверок на null
java
class Service {
    private Repository repo;
    
    public void setRepo(Repository repo) {
        this.repo = repo;
    }
}

Конструкторное внедрение предпочтительнее в большинстве случаев, так как обеспечивает лучшую инкапсуляцию и thread-safety. Сеттеры используют, когда зависимость может меняться в runtime или является опциональной.

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

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

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

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