Основные сущности Spring Framework
Эта страница — карта терминов, которые нужно различать на собеседовании и при отладке.
| Термин | Что это |
|---|---|
BeanDefinition | описание того, как создать и настроить bean |
| bean | объект, которым управляет контейнер |
BeanFactory | базовый контракт контейнера |
ApplicationContext | контейнер плюс инфраструктура приложения |
Environment | properties и активные профили |
Resource | единый доступ к classpath, файлам и URL |
ApplicationEventPublisher | публикация событий внутри контекста |
BeanPostProcessor | обработка экземпляров до/после инициализации |
BeanFactoryPostProcessor | изменение definition до создания бинов |
| proxy | обёртка для инфраструктурного поведения |
Как связаны
configuration
↓
BeanDefinition registry
↓ BeanFactoryPostProcessor
BeanFactory / ApplicationContext
↓ create + inject
bean
↓ BeanPostProcessor
bean or proxyAuto-configuration Spring Boot создаёт обычные definitions на основании classpath, properties и уже существующих бинов. Магии отдельного типа здесь нет.
Где искать проблему
- bean не зарегистрирован — scanning, import, condition;
- кандидатов несколько — type, qualifier, primary;
- advice не сработал — proxy и точка вызова;
- значение property не пришло — sources и precedence;
- контекст долго стартует — constructors, init callbacks, внешние соединения;
- один bean неожиданно заменил другой — conditional и порядок конфигурации.
Вопросы для повторения
- Что создаётся раньше: definition или bean? Сначала definition.
- Чем два post-processor отличаются? Один меняет описания, другой обрабатывает экземпляры.
- Что возвращается после post-processing? Исходный bean или заменяющий его объект, например proxy.
- Auto-configuration обязательна? Нет, её условия можно переопределить или исключить.
- Environment хранит только системные переменные? Нет, объединяет несколько property sources.
Связано: Spring, Spring Context, Жизненный цикл бина, Spring Proxy.