Dependency Injection (DI) — это паттерн проектирования, который используется для реализации принципа Inversion of Control (IoC). DI позволяет передавать зависимости объектам извне, вместо того чтобы объекты сами создавали их. Это ослабляет связь между компонентами системы, что делает код более гибким и удобным для поддержки.

В Java DI часто используется через фреймворки, такие как Spring или Quarkus, где зависимости внедряются автоматически. Основные способы внедрения зависимостей включают:

  • Внедрение через конструктор: зависимости передаются через параметры конструктора.
  • Внедрение через сеттеры: зависимости устанавливаются через методы.
  • Внедрение через поля: зависимости могут быть внедрены напрямую в поля класса с использованием аннотаций.

Пример внедрения через конструктор с использованием Spring:

import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;
 
@Component
class Engine {
    public void start() {
        System.out.println("Engine started");
    }
}
 
@Component
class Car {
    private final Engine engine;
 
    @Autowired
    public Car(Engine engine) {
        this.engine = engine;
    }
 
    public void drive() {
        engine.start();
        System.out.println("Car is moving");
    }
}

В этом примере Spring автоматически создаёт и инжектирует объект Engine в Car, благодаря аннотации @Autowired. Это упрощает управление зависимостями и позволяет легче изменять их без изменения логики программы.

Главные преимущества DI:

  • Лёгкость тестирования: можно подменять зависимости, что упрощает создание модульных тестов.
  • Масштабируемость: система легче адаптируется к изменениям.
  • Упрощение архитектуры: бизнес-логика отделена от процесса создания зависимостей.

Мета информация

Область:: 00 Архитектура ПО
Родитель:: Inversion of Control, Паттерн проектирования
Источник::
Автор::
Создана:: 2023-10-06

Дополнительные материалы

Дочерние заметки