Ответ
Inversion of Control (IoC, Инверсия управления) — это архитектурный принцип, при котором управление созданием объектов и связыванием их зависимостей передается внешнему контейнеру (в Spring — ApplicationContext), а не реализуется самим кодом приложения.
Суть принципа: Классы не создают свои зависимости напрямую, а получают их извне.
Пример без IoC (жесткая связь):
class OrderService {
// Зависимость создается внутри класса
private OrderRepository repository = new JdbcOrderRepository();
}
Пример с IoC в Spring (слабая связь):
@Service // Объявляем класс как управляемый бин (компонент)
public class OrderService {
// Зависимость внедряется контейнером
private final OrderRepository repository;
@Autowired // Контейнер Spring найдет подходящий бин и передаст его сюда
public OrderService(OrderRepository repository) {
this.repository = repository;
}
}
Преимущества IoC:
- Снижение связанности (Loose Coupling): Классы зависят от абстракций (интерфейсов), а не от конкретных реализаций.
- Упрощение тестирования: Зависимости легко подменить mock-объектами.
- Централизованное управление: Жизненный цикл и конфигурация всех компонентов контролируются в одном месте (контейнере).
- Повторное использование кода.
Dependency Injection (DI, Внедрение зависимостей) — это конкретный механизм реализации IoC, при котором зависимости передаются объекту (через конструктор, сеттер или поле).