Spring Framework
Spring организует приложение вокруг объектов, которыми управляет контейнер. Он создаёт их, связывает зависимости, применяет инфраструктурное поведение и управляет жизненным циклом.
Основные части
- IoC контейнер и Spring Context;
- конфигурация и регистрация бинов;
- Способы внедрения зависимостей Spring;
- AOP и Spring Proxy;
- транзакции и доступ к данным;
- Spring WEB;
- Безопасность приложения Spring Security;
- интеграции и события.
Spring Boot не заменяет Spring Framework. Он выбирает совместимые зависимости, выполняет auto-configuration и задаёт эксплуатационные соглашения.
Как запускается контекст
- Читаются источники конфигурации.
- Регистрируются
BeanDefinition. - Выполняются factory/post-processors, которые могут изменить определения.
- Создаются singleton-бины, если не отложены.
- Внедряются зависимости.
- Выполняются callbacks жизненного цикла.
- Bean post-processors могут вернуть прокси вместо исходного объекта.
Поэтому «бин создан конструктором» — только часть истории. См. Жизненный цикл бина.
Типичные проблемы
- зависимость скрыта в поле и неудобна для теста;
- циклическая зависимость маскирует неверные границы;
- вызов метода через
thisобходит proxy; - тяжёлая работа выполняется при создании контекста;
- условная конфигурация создаёт разные приложения без явного контроля;
- singleton хранит изменяемое состояние запроса.
Вопросы для повторения
- Что такое bean? Объект, созданный или зарегистрированный и управляемый контейнером Spring.
- Spring Boot и Spring — одно? Нет, Boot автоматизирует сборку и настройку приложения на Spring.
- Зачем DI? Зависимости становятся явными, заменяемыми и управляются снаружи объекта.
- Почему Spring использует proxy? Чтобы добавить поведение вокруг вызова: транзакцию, безопасность, кэш, AOP.
- Контейнер создаёт все объекты приложения? Нет, только зарегистрированные бины и их инфраструктуру.
Связано: Основные сущности Spring Framework, Основные аннотации Spring, Spring Boot.