Easyiocdi

Что такое IoC и DI?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

IoC (Inversion of Control) — компоненты не создают свои зависимости сами, а получают их извне. DI (Dependency Injection) — реализация IoC через передачу зависимостей (через конструктор, setter, поле).

// Без DI — tight coupling
class OrderService {
    private final Db db = new DbImpl();
}

// С DI — DB предоставляет контейнер
@Service
class OrderService {
    private final Db db;
    public OrderService(Db db) { this.db = db; }  // constructor injection
}
  • loose coupling — можно поменять реализацию (test/prod);
  • testability — mock'и легко подставляются;
  • Spring контейнер (ApplicationContext) создаёт beans и injects;
  • Конструктор-injection предпочтителен (immutable, явные зависимости); единственный конструктор не требует @Autowired.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.