Что такое точное значение Spring Singleton scope?

58
7

Я определил два компонента для одного и того же класса с разными именами id в applicationContext.xml. Он отлично работает, поэтому я запутался в том, что означает точный весенний синглтон. Мой код ниже. Я рассмотрел некоторые другие подобные вопросы в stackoverflow. Но я не понимаю, потому что это не совсем тот же контекст и очень длинное объяснение.

Пожалуйста, поделитесь мной, если вы знаете, что это такое

Я читал, что
1. Отдельный экземпляр для контейнера (контекста),
- В моем случае он создает два контейнера для моих двух экземпляров?

<bean id="a2" class="com.myapp.Address">
<constructor-arg value="Delhi"></constructor-arg>
<constructor-arg value="DOWN"></constructor-arg>
<constructor-arg value="India"></constructor-arg>
</bean>

<bean id="e" class="com.myapp.Employee">
<constructor-arg value="12" type="int"></constructor-arg>
<constructor-arg value="Sonoo"></constructor-arg>
<constructor-arg>
<ref bean="a1" />
</constructor-arg>
</bean>

<bean id="e2" class="com.myapp.Employee">
<constructor-arg value="12" type="int"></constructor-arg>
<constructor-arg value="Sonoo"></constructor-arg>
<constructor-arg>
<ref bean="a2" />
</constructor-arg>
</bean>

спросил(а) 2015-04-17T04:25:00+03:00 5 лет, 6 месяцев назад
1
Решение
81

Spring Singleton scope означает, что весенний контейнер создает один объект только для одного и того же класса для разных экземпляров.

Например, в вашем коде, если вы не вводите значения в e2-объект сотрудника, и если вы попытаетесь напечатать значения для e и e2 обоих классов сотрудников, оба будут давать одинаковый результат.

(Если вы ссылаетесь на bean-компонент в том же файле XML, вы можете использовать <ref local=""/> вместо ref bean)

<bean id="e" class="com.myapp.Employee">
<constructor-arg value="12" type="int"></constructor-arg>
<constructor-arg value="Sonoo"></constructor-arg>
<constructor-arg>
<ref local="a1"/>
</constructor-arg>
</bean>

<bean id="e2" class="com.myapp.Employee">
<constructor-arg>
<ref local ="a2" />
</constructor-arg>
</bean>

В приведенном выше случае значения для сотрудника для e и e2 будут равны 12 и Sonoo.

ответил(а) 2015-07-25T22:33:00+03:00 5 лет, 2 месяца назад
42

Singleton Scoped bean - прямолинейный: каждый компонент на самом деле является одним объектом, созданным в контейнере (например, контекстом приложения).

В вашем примере Spring-контейнер собирается создать 2 объекта Employee (aka Beans), который равен e и e1 соответственно.

Другие области немного сложнее. Для bean-компонента может быть создано более одного объекта. Например, если вы определили компонент с областью прототипа, тогда всякий раз, когда вы просматриваете этот компонент из контейнера, контейнер будет создавать экземпляр нового объекта. Для другой области действия это похоже: контейнер собирается создать новую базу экземпляров для определенного времени (например, область запроса приведет к созданию компонента для каждого входящего запроса и т.д.).


Обратите внимание: не путайте этот синглтон с шаблоном Singleton Design. У них нет ничего общего, кроме характеристики "Только один". Singleton Design Pattern имеет множество других характеристик (например, глобально доступный метод поиска, только один экземпляр во всем пространстве процесса; не допускается явно созданный экземпляр и т.д.), Который не имеет ничего общего с областью Spring Singleton

ответил(а) 2015-04-17T05:59:00+03:00 5 лет, 6 месяцев назад
-6

Spring Singleton scope работает практически так же, как и однопользовательский программный паттерн (http://en.wikipedia.org/wiki/Singleton_pattern), основная идея этого заключается в том, что у вас будет только один экземпляр каждого из них ваши объявленные бобы в экземпляре IOC (контекст с использованием Spring); чтобы быть более кратким, каждый раз, когда вы ссылаетесь на a2, e или e2 в любом компоненте вашего кода, используя весеннюю инъекцию, вы будете иметь ТОЛЬКО ссылку, это означает, что тот же объект находится в том же месте памяти.

Я рекомендую вам взглянуть на это:

http://www.tutorialspoint.com/spring/spring_bean_scopes.htm, а также некоторые рабочие примеры: http://www.mkyong.com/spring/spring-bean-scopes-examples/

Последнее, и экземпляр IOC отличается от экземпляра объекта, экземпляр контейнера похож на ваш основной метод, поэтому в нем все выполняется, и вы создаете bean-компоненты и делаете все в одном контейнере IOC (конечно, есть некоторые архитектуры распределенной среды вы могли бы иметь больше экземпляра контейнера МОК, но я считаю, что не ваше дело)

ответил(а) 2015-04-17T04:58:00+03:00 5 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема