Spring Start Here 3 Flashcards
Области видимости бинов (scope)
- Singleton - @Scope(“singleton”)
- Prototype - @Scope(“prototype”)
- Request (запрос) - @Scope(“request”)
- Session (сессия) - @Scope(“session”)
- Application - @Scope(“application”)
- WebSocket - @Scope(“websocket”)
Область видимости Singleton
По умолчанию.
Spring создаёт единственный экземпляр для каждого уникального имени бина с областью видимости singleton. В результате, если несколько бинов имеют одно и то же имя, то будет создан только один объект, который контейнер будет возвращать по этому имени.
После создания бин помещается в кэш контейнера, чтобы при повторных обращениях к нему не создавать новые экземпляры.
Желательно обеспечить неизменяемость бина для обеспечения потокобезопасности.
Подходит для бинов, которые должны существовать в единственном экземпляре в рамках всего контекста приложения, например, для сервисов или репозиториев.
Области видимости Prototype
Каждый запрос на получение бина приводит к созданию нового экземпляра.
Контейнер создаёт новый бин всякий раз, когда он нужен, но сам не управляет его дальнейшим жизненным циклом.
Используется для объектов, которые должны иметь короткий жизненный цикл, например, для временных задач или объектов с уникальными состояниями.
Применение прототипных бинов решает проблемы конкурентности, поскольку каждый поток получает свой экземпляр, так что определение нескольких прототипных бинов не создает проблем.
Области видимости Request
Только для веб-приложений.
Бин создаётся на каждый HTTP-запрос, существует в течение времени выполнения этого запроса и автоматически уничтожается после завершения запроса.
Подходит для компонентов, которые зависят от состояния текущего HTTP-запроса, например, для хранения данных, связанных с этим запросом.
Области видимости Session
Только для веб-приложений
Бин создаётся один раз на каждую HTTP-сессию и остаётся доступным, пока существует эта сессия.
Используется для хранения данных, специфичных для сессии пользователя, например, временные данные авторизации.
Области видимости Application
Только для веб-приложений
Создаётся один экземпляр бина на весь жизненный цикл веб-приложения. Бин существует так же долго, как и ServletContext.
Подходит для компонентов, которые должны быть едины для всех пользователей и сессий в пределах всего веб-приложения.
Области видимости WebSocket
Для приложений с поддержкой WebSocket
Создаётся один бин на каждую WebSocket-сессию. Бин существует так долго, как длится соединение WebSocket.
Используется для хранения состояния, специфичного для сессии WebSocket, например, для хранения данных о подключении.
“Ленивое” создание бинов
Компонент создаётся только в момент, когда происходит первое обращение к данному бину.
Достигается путём применения аннотации @Lazy.
Лучше не использовать.
Жизненный цикл бина
- Создание;
- Внедрение зависимостей (Dependency Injection);
- Настройка (Setting Bean Properties):
- Постобработка бина (Bean Post Processing);
- Инициализация (Bean Initialization);
- Постобработка после инициализации (Post Processing After Initialization);
- Использование бина;
- Завершение и уничтожение (Bean Destruction);