Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Область видимости бина

Читайте также:
  1. III. Управление предметной областью проекта
  2. Адрес, Город, область, край
  3. Анализ видимости спутников
  4. БО одноуровневого издания. Область физической характеристики.
  5. Если область прибытия соответствия совпадает с его областью отправления, то соотвествие преобразуется в отношение.
  6. Каждое ограничение связано с отдельной карьерной областью. Когда сим достигает 10 уровня в конкретной карьере, ограничение снимается.
  7. Какая область знаний более всего привлекает?

В SpringFramework версии 3.0 и выше доступны следующие области видимости:

При использовании Spring вне web-контейнера доступными становятся только singleton и prototype. Область видимости thread доступна, но требует дополнительной регистрации в контексте. Кроме того, Spring спроектирован таким образом, что позволяет программистам добавлять свои области видимости, специфичные для решаемой задачи.

 

Основное отличие между singleton и prototype заключается в том, что singleton создаётся один раз, при создании и инициализации контекста, и каждый вызов метода getBean() возвращает один и тот же экземпляр. Более того, если в контексте несколько бинов ссылаются на singleton, то по сути они ссылаются на один и тот же эксземпляр.

Если же бин объявлен с областью видимости prototype, то каждый вызов getBean() будет приводить к созданию нового экземпляра класса.

По умолчанию все бины создаются с областью видимости singleton. Для того что бы создать prototype необходимо объявить атрибут scope:

<bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>

 

Приведённый ниже пример регистрирует новый scope (который тем не менее входит в комплект SpringFramework):

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"> <property name="scopes"> <map> <entry key="thread"> <bean class="org.springframework.context.support.SimpleThreadScope"/> </entry> </map> </property> </bean> <bean id="bar" class="x.y.Bar" scope="thread"> <property name="name" value="Rick"/> <aop:scoped-proxy/> </bean> <bean id="foo" class="x.y.Foo"> <property name="bar" ref="bar"/> </bean> </beans>

 

Если необходимо в качестве коллаборатора (dependency) проставить бин с областью видимости (scope) отличной от singleton, то очевидно, простое указание dependency не будет работать. Для этого необходимо указать Spring, что вместо целевого класса необходимо проставлять в качестве коллаборатора его прокси-объект. Spring автоматически генерирует прокси объект на scoped бин, если в описание бина добавить <aop:scoped-proxy/>.

Для генерации прокси объекта Spring по умолчанию использует CGLIB, которая генерирует подкласс целевого класса. В этом случае проксируются только public методы. Кроме того, вместо CGLIB возможно использование Java interface proxy. Для этого необходимо указать false:

<!-- DefaultUserPreferences implements the UserPreferences interface --><bean id="userPreferences" class="com.foo.DefaultUserPreferences" scope="session"> <aop:scoped-proxy proxy-target-class="false"/></bean> <bean id="userManager" class="com.foo.UserManager"> <property name="userPreferences" ref="userPreferences"/></bean>

 


Дата добавления: 2015-10-24; просмотров: 139 | Нарушение авторских прав


Читайте в этой же книге: Template Method | Структурные шаблоны | Аспектно-Ориентированное Программирование (Aspect Oriented Programming, AOP) | Подходы к межсистемной интеграции | Интеграция с помощью разделяемой базы данных | Каналы и Фильтры | Уровни преобразования данных | Транзакционны протокол | Введение в Rational Unified Process | Экстремальное Программирование (Extreme Programming) |
<== предыдущая страница | следующая страница ==>
Введение. Что такое Контейнер объектов и зачем он нужен| Apache Thrift

mybiblioteka.su - 2015-2024 год. (0.006 сек.)