Spring Context
ApplicationContext — контейнер и среда исполнения Spring-приложения. Он расширяет базовый BeanFactory: добавляет события, ресурсы, сообщения, профили и интеграцию с инфраструктурой.
Распространённые реализации
AnnotationConfigApplicationContext— обычное приложение с Java-конфигурацией;AnnotationConfigServletWebServerApplicationContext— servlet-приложение Spring Boot;- reactive web context — для WebFlux;
- тестовый контекст создаётся Spring Test и кэшируется между совместимыми тестами.
XML-контексты существуют, но в новых проектах чаще встречаются аннотации и Java-конфигурация.
Иерархия
Контекст может иметь родителя. Дочерний видит родительские бины, родитель не видит дочерние. Это встречается в web-инфраструктуре и сложных модульных приложениях, но большинство Boot-приложений использует один основной контекст.
Доступ к бинам
Обычный код получает зависимости через конструктор. Вызов context.getBean() уместен в инфраструктуре или динамическом выборе, но повсеместное использование превращает контейнер в service locator.
Вопросы для повторения
- Чем
ApplicationContextширеBeanFactory? Добавляет инфраструктуру приложения поверх создания бинов. - Нужно ли хранить context в каждом сервисе? Нет, зависимости лучше внедрять явно.
- Может ли быть несколько контекстов? Да, включая иерархию, но это усложняет видимость бинов.
- Потокобезопасны ли все бины контекста? Нет, singleton означает один экземпляр, а не автоматическую thread safety.
Связано: IoC контейнер, Виды бинов, Spring.