Где находится IoC-контейнер в Spring Framework?

«Где находится IoC-контейнер в Spring Framework?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

IoC-контейнер (Inversion of Control) — это ядро Spring Framework, которое существует в памяти приложения во время его выполнения. Он не имеет фиксированного "места" в файловой системе, а представляет собой объект в JVM, отвечающий за создание, конфигурацию и управление жизненным циклом бинов (beans).

Основные реализации интерфейсов контейнера:

  1. BeanFactory — базовый, легковесный контейнер, предоставляющий фундаментальные возможности DI.
  2. ApplicationContext — расширенный, полнофункциональный контейнер, который наследует BeanFactory и добавляет:
    • Упрощенную интеграцию с AOP (Aspect-Oriented Programming).
    • Управление событиями (Event Publication).
    • Интернационализацию (i18n).
    • Загрузку ресурсов (Resource Loading).
    • Декларативное создание контекста.

Практическое создание контейнера:

// Для XML-конфигурации
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

// Для Java-based конфигурации (аннотации)
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

В Spring Boot контейнер ApplicationContext создается и запускается автоматически методом SpringApplication.run(). Контейнер "живет" от старта приложения до его завершения, храня все управляемые бины в куче (Heap).