Spring Framework

Spring организует приложение вокруг объектов, которыми управляет контейнер. Он создаёт их, связывает зависимости, применяет инфраструктурное поведение и управляет жизненным циклом.

Основные части

Spring Boot не заменяет Spring Framework. Он выбирает совместимые зависимости, выполняет auto-configuration и задаёт эксплуатационные соглашения.

Как запускается контекст

  1. Читаются источники конфигурации.
  2. Регистрируются BeanDefinition.
  3. Выполняются factory/post-processors, которые могут изменить определения.
  4. Создаются singleton-бины, если не отложены.
  5. Внедряются зависимости.
  6. Выполняются callbacks жизненного цикла.
  7. Bean post-processors могут вернуть прокси вместо исходного объекта.

Поэтому «бин создан конструктором» — только часть истории. См. Жизненный цикл бина.

Типичные проблемы

  • зависимость скрыта в поле и неудобна для теста;
  • циклическая зависимость маскирует неверные границы;
  • вызов метода через this обходит proxy;
  • тяжёлая работа выполняется при создании контекста;
  • условная конфигурация создаёт разные приложения без явного контроля;
  • singleton хранит изменяемое состояние запроса.

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

  1. Что такое bean? Объект, созданный или зарегистрированный и управляемый контейнером Spring.
  2. Spring Boot и Spring — одно? Нет, Boot автоматизирует сборку и настройку приложения на Spring.
  3. Зачем DI? Зависимости становятся явными, заменяемыми и управляются снаружи объекта.
  4. Почему Spring использует proxy? Чтобы добавить поведение вокруг вызова: транзакцию, безопасность, кэш, AOP.
  5. Контейнер создаёт все объекты приложения? Нет, только зарегистрированные бины и их инфраструктуру.

Связано: Основные сущности Spring Framework, Основные аннотации Spring, Spring Boot.