Почему область действия прототипа используется с компонентом Stateful? - PullRequest
0 голосов
/ 03 марта 2019

Spring docs - Как правило, вы должны использовать область действия прототипа для всех bean-компонентов с состоянием, в то время как синглтонная область должна использоваться для bean-компонентов без состояния.

Так что bean-компонент с состоянием необходим, когдадолжны поддерживать некоторое состояние / данные последовательно в контексте.Скажи банковское приложение.Вы ожидаете, что ваш объект будет синхронизирован во время различных операций (депозита, изъятия и т. Д.).

Таким образом, в одноэлементной области вы получаете одно и то же - согласованность объектов в контексте.

Так почему же Javadoc утверждает противоположность?

Помогите !!:)

1 Ответ

0 голосов
/ 03 марта 2019

Это в основном связано с проблемами синхронизации, которые необходимо сохранять в натуральном выражении при использовании одноэлементных компонентов в многопоточной среде.С прототипом bean-компонентов каждый поток получит новый экземпляр bean-компонента, поэтому вам не нужно заботиться о синхронизации доступа к состоянию bean-компонента между потоками.

В большинстве случаев вы не столкнетесь с необходимостью использования bean-компонентов с состояниемпоскольку состояние обеспечивается отдельным уровнем персистентности или непосредственно самим вызывающим абонентом.

Одним из примеров одноэлементных компонентов, имеющих состояние, являются кэши.Используя выделенные библиотеки кеша, такие как infinispan, guava, hazlecast, ... вам не нужно беспокоиться о синхронизации здесь, так как этот аспект обрабатывается этими библиотеками для вас.

Учитывая ваш банковский пример, вывероятно, не хотите хранить детали транзакции в основном хранилище, таком как куча Java.Если по какой-либо причине произойдет сбой вашего приложения, вся эта информация будет безвозвратно потеряна.Эта информация должна храниться в постоянном хранилище, таком как база данных.

...