Ответ
Inversion of Control (IoC) – это принцип проектирования, при котором управление созданием объектов и связыванием зависимостей передается внешнему контейнеру (фреймворку), а не осуществляется самим кодом приложения.
В Spring IoC реализуется через Dependency Injection (DI) – механизм внедрения зависимостей в объекты.
Преимущества IoC/DI:
- Слабая связанность (Loose Coupling): Классы не создают свои зависимости напрямую.
- Упрощение тестирования: Зависимости можно легко подменить моками.
- Централизованное управление: Контейнер Spring управляет жизненным циклом бинов.
Пример внедрения зависимости через конструктор:
@Service
public class OrderService {
private final PaymentProcessor paymentProcessor;
// Контейнер IoC (Spring) создаст PaymentProcessor и внедрит его сюда
public OrderService(PaymentProcessor paymentProcessor) {
this.paymentProcessor = paymentProcessor;
}
public void processOrder(Order order) {
paymentProcessor.charge(order.getAmount());
}
}
@Component
public class PaymentProcessor {
public void charge(BigDecimal amount) { /* ... */ }
}
Контейнер Spring (ApplicationContext) берет на себя ответственность за создание PaymentProcessor и его передачу в конструктор OrderService.