Spring: объемы Singleton/сессии и параллелизм

Я думаю, что у Вас должны на самом деле быть кнопка отправки или отправлять изображение... У Вас есть определенная причина использования, "отправляют отделение"? Если Вы просто хотите пользовательские стили, я рекомендую . http://webdesign.about.com/cs/forms/a/aaformsubmit_2.htm

9
задан Alex Siman 17 November 2009 в 00:21
поделиться

3 ответа

Когда вы используете singleton область видимости из контейнера Spring, вы указываете, что все потоки, которые извлекают компонент из контейнера, будут использовать один и тот же экземпляр. Таким образом, в этом случае, когда список состояний элемента является общим и может изменяться между потоками, вам придется синхронизировать доступ к списку, чтобы защитить ваше приложение от исключения ConcurrentModificationException .

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

В случае сеанса области, вы можете с меньшей вероятностью столкнуться с проблемой параллелизма, поскольку компонент будет доступен только для текущего пользователя, вошедшего в систему. Однако это ' Возможно (по крайней мере, в сети) иметь несколько запросов, поступающих в одном сеансе, и в этом случае вам нужно будет принять те же меры предосторожности, как если бы bean-компонент был синглтон.

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

24
ответ дан 4 December 2019 в 10:32
поделиться

Только пользователь этого сеанса может получить доступ к этому классу, но ArrayList не является потокобезопасным, как показано в этом обсуждении: http://forums.sun.com/thread. jspa? threadID = 5355402

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

Вы можете захотеть посмотрите комментарии в этом обсуждении для получения дополнительной информации: http://wheelersoftware.com/articles/spring-session-scoped-beans.html

0
ответ дан 4 December 2019 в 10:32
поделиться

В основном для каждого пользователя, который инициирует сеанс, будет создана новая ShoppingCart , область действия которой будет ограничена этим сеансом для этого пользователя.

Ваш класс является потокобезопасным. Инициализация

private List<Product> items = new ArrayList<Product>();

является поточно-ориентированной инициализацией, а

addItem (Product item) является атомарной операцией и, следовательно, является поточно-ориентированной.

-4
ответ дан 4 December 2019 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: