Сохраняется ли bean-объект области Spring в HttpSession? - PullRequest
5 голосов
/ 13 февраля 2012

Поскольку у меня нет глубоких знаний о реализации области весенней сессии. Может кто-нибудь сказать мне, если разумно использовать bean-объекты Spring Session, где объект HttpSession очень важен. Как веб-приложение, где тысячи пользователей одновременно получают доступ к сайту.

Сохраняется ли bean-объект области весенней сессии в объекте HttpSession?

Или, даже если объект HttpSession ссылается только на bean-объект области весенней сессии, мы не делаем объект сессии тяжелым?

Чем отличается форма хранения любого бина непосредственно в объекте HttpSession (что делает объект HttpSession тяжелой точкой зрения)?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Объект на самом деле не сохраняется в сеансе HTTP. Он связан с идентификатором сессии и фактически хранится в контексте Spring. Слушатель сеанса используется для очистки экземпляров после закрытия сеанса. См. SessionScope JavaDoc.

1 голос
/ 13 февраля 2012

Вот что говорят весенние документы:

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

"Heavy"? Не тяжелее, чем объект, который вы помещаете в него. Сессии должны иметь конечную продолжительность жизни. Несколько килобайт на сессию не будут концом вашего приложения. Простой расчет количества одновременных сеансов и требований к объектной памяти должен убедить вас в настройках памяти вашего сервера приложений. При необходимости вы всегда можете увеличить минимальную и максимальную память.

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

0 голосов
/ 31 декабря 2017

Сохраняется ли bean-объект области весеннего сеанса в объекте HttpSession?

Если упомянутый здесь объект HttpSession фактически предоставляется spring-session (spring-session оборачивает объект httpSession в исходный httpRequest), ответ будет ДА ​​-> действительно, все bean-объекты области весеннего сеанса сохраняются в httpSession, предоставляемом spring-session как атрибуты.

Или даже если объект HttpSession ссылается только на весенний сеансbean в области видимости, мы не делаем объект сессии тяжелым?

Нет.«Тяжесть» httpSession очень сильно зависит от объектов, которые вы вставляете. Кроме того, сессионные компоненты должны быть эфемерными.Наконец, что не менее важно, объект сеанса в мире микросервисов обычно выгружается в автономное хранилище, такое как Redis или HazelCast.Таким образом, он не будет считаться «тяжелым» с точки зрения потребления памяти.

Как отличается форма хранения любого компонента непосредственно в объекте HttpSession (что делает объект HttpSession тяжелой точкой зрения)?

Нет никакой разницы (при условии, что вы используете spring-sesion), так как все все bean-объекты области весеннего сеанса сохраняются в httpSession, предоставленном spring-session, как атрибуты.

...