Получить доступ

Чем ApplicationContext отличается от BeanFactory?

MiddleApplicationContext и конфигурацияSpring
Ещё спрашивают так:
  • Что добавляет ApplicationContext к BeanFactory?
Коротко

BeanFactory — базовый контейнер: создаёт бины и внедряет зависимости, лениво. ApplicationContext — надстройка, которой пользуются почти всегда: события, интернационализация, ресурсы, Environment и профили, автоматическая регистрация BeanPostProcessor, ранняя инициализация singleton-бинов.

  • Context создаёт singleton при старте — ошибки конфигурации видны сразу
  • BeanFactory вручную — разве что в очень ограниченных средах
  • В Spring Boot — AnnotationConfigServletWebServerApplicationContext и подобные

А ещё ApplicationContext сам реализует BeanFactory

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

BeanFactory — минимальный интерфейс контейнера: getBean, проверка наличия, тип и scope бина. Реализация DefaultListableBeanFactory хранит определения бинов и создаёт объекты по запросу (лениво).

ApplicationContext расширяет BeanFactory и добавляет:

  • раннюю инициализацию всех singleton-бинов при старте — ошибка конфигурации (нет зависимости, неверное свойство) роняет старт, а не первый запрос;
  • автоматическую регистрацию BeanPostProcessor и BeanFactoryPostProcessor — на них работают @Autowired, @Transactional, @Value, AOP;
  • события — ApplicationEventPublisher, @EventListener;
  • Environment — профили и свойства;
  • ресурсы — getResource("classpath:...");
  • интернационализацию — MessageSource;
  • жизненный цикл: refresh, close, хуки остановки.

На практике работают только с ApplicationContext; Spring Boot создаёт подходящий (ServletWebServerApplicationContext для MVC, ReactiveWebServerApplicationContext для WebFlux). Прямое использование BeanFactory — редкость (встраиваемые среды, тесты низкого уровня).

Что хотят услышать

  • BeanFactory как базовый контейнер.
  • Что добавляет ApplicationContext.
  • Ранняя инициализация и обработчики бинов.

Частые ошибки

  • Считать их независимыми контейнерами — Context сам является BeanFactory.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗BeanFactory мощнее ApplicationContext
  • ✓ApplicationContext — надстройка: жадные синглтоны (fail-fast), события, i18n, автодетект BPP/BFPP, интеграция с AOP
  • ✗ApplicationContext только ленивый, BeanFactory жадный
  • ✗Это одно и то же

Что спросят дальше

  • Когда создаются singleton beans?
  • Что такое BeanPostProcessor?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем