2013-07-11 3 views
33

Может кто-нибудь объяснить, какие области находятся в весенних бобах. Я всегда использовал «прототип», но есть ли другие параметры, которые я могу использовать вместо этого?Spring Bean Scopes

Пример того, что я говорю о

<bean id="customerInfoController" class="com.action.customer.Controller" scope="prototype"> 
    <property name="accountDao" ref="accountDao"/> 
    <property name="utilityDao" ref="utilityDao"/> 
    <property name="account_usageDao" ref="account_usageDao"/> 
</bean> 
+0

См [Bean Прицелы] (http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html) – Reimeus

+0

HTTP://www.mkyong.com/spring/spring-bean-scopes-examples/ – sanbhat

+0

[Более качественная и официальная документация здесь] (http://docs.spring.io/spring-framework/docs/current/spring-framework- reference/html/beans.html # beans-factory-scopes) – KNU

ответ

53

С spring specs, существует пять видов фасоли областей поддерживаются:

1. синглтон (по умолчанию *)

Обладает определением одного компонента в экземпляр одного объекта за весну Контейнер IoC.

2. Прототип

Области применения единого определения боб для любого количества экземпляров объектов.

3. Запрос

Области применения единого определения фасоли в жизненном цикле одного HTTP запроса ; то есть каждый HTTP-запрос будет иметь свой собственный экземпляр компонента, созданного с обратной стороны одного определения компонента. Действует только в контексте веб-контекста Spring ApplicationContext.

4. Сессия

Области применения единого определения боб для жизненного цикла HTTP сессии. Действует только в контексте веб-контекста Spring ApplicationContext.

5. Глобальная сессия

Области применения единого определения боб в жизненном цикле глобального HTTP Session. Обычно используется только при использовании в контексте портлета. Только действителен в контексте веб-ресурса Spring ApplicationContext.

* по умолчанию означает, что в теге <bean /> явно не указана область видимости. прочитать о них здесь: http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html

2

Spring документация описывает following standard scopes:

одноплодной: (по умолчанию) Области применения единого определения боб для одного экземпляра объекта в Spring IoC контейнер.

prototype: Обладает определением одного компонента для любого количества экземпляров объектов.

запрос: Обладает определением одного компонента для жизненного цикла одного HTTP-запроса; то есть каждый HTTP-запрос имеет свой собственный экземпляр компонента, созданного с обратной стороны одного определения компонента. Действителен только в контексте веб-ресурса Spring ApplicationContext.

сеанс: Обладает определением одного компонента для жизненного цикла сеанса HTTP. Действителен только в контексте веб-ресурса Spring ApplicationContext.

глобальная сессия: Обладает определением одного компонента для жизненного цикла глобальной HTTP-сессии. Обычно используется только при использовании в контексте портлета. Действителен только в контексте веб-ресурса Spring ApplicationContext.

Дополнительные пользовательские области также могут быть созданы и сконфигурированы с использованием CustomScopeConfigurer. Примером может служить область flow, добавленная Spring Webflow.

Кстати, вы утверждаете, что всегда использовали prototype то, что я нахожу странным. Стандартная область применения - singleton, и в разработке приложения я редко нуждаюсь в области прототипа. Возможно, вам стоит взглянуть на это.

4

Подробное объяснение для каждой сферы можно найти здесь: Spring bean scopes. Ниже приводится краткое изложение

Синглтон - (по умолчанию) Скоупс одно определение компонента к одному экземпляру объекта в Spring IoC контейнера.

prototype - Обладает определением одного компонента для любого количества экземпляров объектов.

запрос - Область определения единственного компонента для жизненного цикла одного HTTP-запроса; то есть каждый HTTP-запрос имеет свой собственный экземпляр компонента, созданного с обратной стороны одного определения компонента. Действителен только в контексте веб-ресурса Spring ApplicationContext.

сеанс - Область определения единственного компонента для жизненного цикла сеанса HTTP. Действителен только в контексте веб-ресурса Spring ApplicationContext.

глобальная сессия - Область определения единственного компонента для жизненного цикла глобальной сессии HTTP. Обычно используется только при использовании в контексте портлета. Действителен только в контексте веб-ресурса Spring ApplicationContext.

12

Весной область видимости бобов используется для определения того, какой тип экземпляра bean-компонента должен быть возвращен из контейнера Spring обратно вызывающему.

5 видов фасоли областей поддерживаются:

  1. Singleton: возвращает один экземпляр боб за Spring IoC container.This один экземпляр хранится в кэше таких одноэлементных бобов, и все последующие запросы и ссылки для этого имени bean возвращают кешированный объект. Если в файле конфигурации bean не указана область, по умолчанию для singleton.

  2. Прототип: Он возвращает новый экземпляр bean каждый раз по запросу. Он не хранит кеш-версию, такую ​​как singleton.

  3. Запрос: Он возвращает один экземпляр компонента по запросу HTTP.

  4. Сессия: Он возвращает один экземпляр компонента в сеансе HTTP (сеанс пользовательского уровня).

  5. GlobalSession: Он возвращает один экземпляр компонента в глобальный сеанс HTTP. Он действителен только в контексте веб-приложения Spring ApplicationContext (сеанс уровня приложения).

В большинстве случаев, вы можете иметь дело только с основной сферой действия Спринга - одноплодной и прототипа, и масштаб по умолчанию одноточечен.

1

Просто хочу обновить, что в Spring 5, как указано в Spring docs, Spring поддерживает 6 областей, пять из которых доступны, только если вы используете веб-приложение ApplicationContext.

одноэлементный (по умолчанию) Области применения единого определения боб для одного экземпляра объекта в Spring IoC контейнера.

prototype Область применения одного компонента для любого экземпляра объекта.

запрос Область применения одного определения компонента для жизненного цикла одного HTTP-запроса; то есть каждый HTTP-запрос имеет свой собственный экземпляр компонента, созданного с обратной стороны одного определения компонента. Действителен только в контексте веб-ресурса Spring ApplicationContext.

сеанс Области определения одного компонента в жизненный цикл сеанса HTTP. Действителен только в контексте веб-ресурса Spring ApplicationContext.

приложение Области определения одного компонента в жизненный цикл ServletContext. Действителен только в контексте веб-ресурса Spring ApplicationContext.

websocket Области определения одного компонента в жизненный цикл WebSocket. Действителен только в контексте веб-ресурса Spring ApplicationContext.

+0

Есть всего 6 областей и две верхние могут быть использованы без использования Интернета? Если да, то как вы скажете, что из 6, пять из которых доступны, только если вы используете веб-приложение ApplicationContext? – MrKumar

0

О прототипе боба (ы):

Клиент код должен очистить прототип в области видимости объектов и освободить дорогие ресурсы, прототип боб (s) удерживающие. Чтобы получить весенний контейнер , чтобы освободить ресурсы, хранящиеся в компонентах, обработанных прототипом, попробуйте использовать пользовательский компонентный постпроцессор, содержащий ссылку на бобы, которые необходимо очистить.

исх: https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html#beans-factory-scopes-prototype

Смежные вопросы