Чем ApplicationContext отличается от BeanFactory?
- Что добавляет ApplicationContext к BeanFactory?
BeanFactory — базовый контейнер: создаёт бины и внедряет зависимости, лениво. ApplicationContext — надстройка, которой пользуются почти всегда: события, интернационализация, ресурсы, Environment и профили, автоматическая регистрация BeanPostProcessor, ранняя инициализация singleton-бинов.
- Context создаёт singleton при старте — ошибки конфигурации видны сразу
- BeanFactory вручную — разве что в очень ограниченных средах
- В Spring Boot — AnnotationConfigServletWebServerApplicationContext и подобные
А ещё ApplicationContext сам реализует BeanFactory
Подробно
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 мощнее: он поддерживает события, i18n и AOP, а контекст — нет
- ✓ApplicationContext — надстройка: жадные синглтоны, события, i18n, автодетект BPP
- ✗ApplicationContext только ленивый, BeanFactory жадный
- ✗Это одно и то же
Что спросят дальше
- Когда создаются singleton beans?
- Что такое BeanPostProcessor?
Разбор темы
- ApplicationContext и конфигурация
BeanFactory против ApplicationContext, способы конфигурации, @Configuration full/lite, профили и Environment, @Conditional.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.