Gymterview
junior

Что такое Spring-контейнер? В чём разница между BeanFactory и ApplicationContext?

Spring-контейнер (IoC-контейнер) – ядро Spring Framework, отвечающее за создание бинов, их конфигурирование и управление жизненным циклом. Контейнер читает метаданные конфигурации (аннотации, XML, Java-конфигурация) и на их основе создаёт и связывает объекты.

Аспект BeanFactory ApplicationContext
Инициализация Ленивая (lazy) – бины создаются при первом запросе Жадная (eager) – singleton-бины создаются при запуске
Интернационализация Нет Да (MessageSource)
Публикация событий Нет Да (ApplicationEventPublisher)
Загрузка ресурсов Нет Да (ResourceLoader)
Интеграция с AOP Нет Да
Поддержка профилей Нет Да
Пример
// BeanFactory -- базовый (редко используется напрямую)
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
MyBean bean = factory.getBean(MyBean.class);

// ApplicationContext -- стандартный выбор
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

// Spring Boot создаёт ApplicationContext автоматически
SpringApplication.run(MyApplication.class, args);

Основные реализации ApplicationContext

  • AnnotationConfigApplicationContext – для Java-конфигурации
  • ClassPathXmlApplicationContext – для XML-конфигурации из classpath
  • FileSystemXmlApplicationContext – для XML из файловой системы
  • WebApplicationContext – для веб-приложений

На собеседовании: в современных приложениях всегда используется ApplicationContext. BeanFactory оправдан только в средах с крайне ограниченными ресурсами. Частая ошибка – не знать, чем они отличаются, и сказать «это одно и то же».