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 подскажет развёрнутый ответ в реальном времени.