Основные сущности Spring Framework

Эта страница — карта терминов, которые нужно различать на собеседовании и при отладке.

ТерминЧто это
BeanDefinitionописание того, как создать и настроить bean
beanобъект, которым управляет контейнер
BeanFactoryбазовый контракт контейнера
ApplicationContextконтейнер плюс инфраструктура приложения
Environmentproperties и активные профили
Resourceединый доступ к classpath, файлам и URL
ApplicationEventPublisherпубликация событий внутри контекста
BeanPostProcessorобработка экземпляров до/после инициализации
BeanFactoryPostProcessorизменение definition до создания бинов
proxyобёртка для инфраструктурного поведения

Как связаны

configuration
    ↓
BeanDefinition registry
    ↓  BeanFactoryPostProcessor
BeanFactory / ApplicationContext
    ↓  create + inject
bean
    ↓  BeanPostProcessor
bean or proxy

Auto-configuration Spring Boot создаёт обычные definitions на основании classpath, properties и уже существующих бинов. Магии отдельного типа здесь нет.

Где искать проблему

  • bean не зарегистрирован — scanning, import, condition;
  • кандидатов несколько — type, qualifier, primary;
  • advice не сработал — proxy и точка вызова;
  • значение property не пришло — sources и precedence;
  • контекст долго стартует — constructors, init callbacks, внешние соединения;
  • один bean неожиданно заменил другой — conditional и порядок конфигурации.

Вопросы для повторения

  1. Что создаётся раньше: definition или bean? Сначала definition.
  2. Чем два post-processor отличаются? Один меняет описания, другой обрабатывает экземпляры.
  3. Что возвращается после post-processing? Исходный bean или заменяющий его объект, например proxy.
  4. Auto-configuration обязательна? Нет, её условия можно переопределить или исключить.
  5. Environment хранит только системные переменные? Нет, объединяет несколько property sources.

Связано: Spring, Spring Context, Жизненный цикл бина, Spring Proxy.