Инструкция по созданию бизнесобъектов. Strategy это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми
Скачать 0.73 Mb.
|
1. Что такое бин (Bean)?Spring Bean— это класс, созданием экземпляров которых и установкой в нем зависимостей управляет контейнер фреймворка Spring. Бины предназначены для реализации бизнес-логики приложения. Эти объекты создаются с помощью конфигурационных метаданных, которые указываются в контейнере (например, XML- Spring Bean представляет собой Singleton, то есть в некотором блоке приложения существует только один экземпляр данного класса. Поэтому, если бин содержит изменяемые данные в полях (другими словами, имеет состояние), то обращение к таким данным необходимо синхронизировать. 2. Виды бинов (Beans types)?Виды бинов определяются, по сути, их видимостью (scope). В Spring Framework во всех определениях бизнес-сущностей (bean) явно или неявно присутствует атрибут scope. В Java-конфигурации он передается в аннотации @Scope, в xml – в атрибуте scope тега Атрибут scope – это строка-идентификатор, которая ставит бину в соответствие экземпляр класса org.springframework.beans.factory.config.Scope. Scope – реализация паттерна «Strategy» для фабрик бинов, инструкция по созданию бизнес-объектов. Strategy — это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми. Другие объекты содержат ссылку на объект-стратегию и делегируют ей работу. Программа может подменить этот объект другим, если требуется иной способ решения задачи. Виды бинов по области видимости: 1. Singleton – определяет один единственный бин для каждого контейнера Spring Inversion of Control (IoC). Режим по умолчанию. Если установить свойству scope значение singleton, то в это случае контейнер Spring IoC создает только один экземпляр объекта определенного в bean. Этот экземпляр помещается в cache-memory таких же бинов (синглтонов) и все последующие вызовы бина с таким именем будут возвращать объект из cache-memory (кэша). Scope Singleton чаще всего используется когда у Bean нет изменяемого состояния (когда он является stateless). В xml конфигурационном файле можно явно указать, что область видимости будет singleton (хоть и не требуется): Так же это можно сделать и в коде, используя аннотацию @Scope под аннотацией @Bean: 2. Prototype – контейнер Spring IoC создает новый экземпляр бина на каждый полученный запрос. Scope Prototype чаще всего используется когда у Bean есть изменяемое состояние (когда он является stateful). Если внедрять prototype, то для каждого singleton будет создан уникальный prototype. 3. Request – создается один экземпляр бина на каждый HTTP запрос. Жизненный цикл экземпляра ограничен единственным HTTP запросом; для каждого нового HTTP запроса создается новый экземпляр бина. Действует, только если вы используете web-aware ApplicationContext. Таким образом, если сервер в настоящее время обрабатывает 50 запросов, тогда контейнер может иметь не более 50 бинов, по одному для каждого HTTP-запроса. Любое изменение состояния одного экземпляра не будет видимо другим экземплярам. Эти экземпляры уничтожаются, как только HTTP-запрос завершен. 4. Session – создается один экземпляр бина каждую HTTP сессию. Жизненный цикл экземпляра ограничен в пределах одной и той же HTTP Session. Действует, только если вы используете web-aware ApplicationContext Таким образом, если сервер имеет 20 активных сессий, тогда контейнер может иметь не более 20 бинов, по одному для каждой сессии. Все HTTP-запросы в пределах времени жизни одной сессии будут иметь доступ к одному и тому же бину. 5. Global Session (нет в 5 версии Spring)– создается один экземпляр бина на каждую глобальную HTTP сессию. Жизненный цикл экземпляра ограничен в пределах глобальной HTTP Session (обычно при использовании portlet контекста). Действует, только если вы используете web-aware ApplicationContext; 6. Application – жизненный цикл экземпляра ограничен в пределах ServletContext. Действует, только если вы используете web-aware ApplicationContext. Виден как атрибут ServletContext. Синглтон - в одном экземпляре для ApplicationContext. 7. Custom thread scope – Spring по умолчанию не предоставляет thread scope, но его можно активировать. Каждый запрос на бин в рамках одного потока будет возвращать один и тот же бин. |