Ответ
Да, абсолютно верно. Dependency Injection (DI, внедрение зависимостей) — это конкретная реализация более общего принципа Inversion of Control (IoC, инверсия управления).
- IoC — это архитектурный паттерн, при котором управление потоком выполнения или созданием объектов передается от приложения внешнему контейнеру или фреймворку (например, Spring IoC Container).
- DI — это механизм, реализующий IoC, при котором зависимости объекта предоставляются ему извне ("внедряются"), а не создаются самим объектом.
Пример IoC/DI в Spring:
// Без DI: объект сам управляет своей зависимостью (прямое создание).
public class OldService {
private Repository repository = new RepositoryImpl(); // Прямое создание -> Нет IoC
}
// С DI: контейнер Spring управляет созданием и внедрением зависимости.
@Service
public class ModernService {
private final Repository repository;
// Контейнер Spring (IoC Container) создаст бин Repository и внедрит его сюда.
@Autowired
public ModernService(Repository repository) { // DI через конструктор
this.repository = repository; // Управление инвертировано -> Есть IoC
}
}
Таким образом, DI — это один из наиболее распространенных способов достижения IoC.