2015-11-29 2 views
0

Я работаю над проектом, в котором мне нужно сохранить набор ключей и значений в течение всего сеанса выполнения программы. Значение, когда сервер работает, я хочу иметь карту, которая хранит данные и одинакова для нескольких запросов, сделанных в этом сеансе.Создайте единый экземпляр HashMap в Java на протяжении всего сеанса

Таким образом, для создания этой карты, я должен сделать статическую Map или создать одноэлементный компонент для него и использовать автоматического связывания? Что лучше?

Я использовал статическую карту, но заметил, что даже после остановки сервера и запуска его снова экземпляр карты имел значения из предыдущего сеанса, вместо этого он должен был иметь значение null в начале запроса. Объекты не разрушались должным образом.

Улучшено ли это поведение, если я буду использовать бобы?

+0

Если вы действительно остановили сервер, то статическая карта не запомнит значения - при запуске она будет пустой. Не знаете, почему вы все еще видите ценности - какой это сервер? –

+0

Вы говорите о сеансах HTTP?Что вы подразумеваете под сеансом? Где ваш код? –

ответ

0

Вы должны определить, что такое Session.

Как правило, в веб-проекте сеанс связан с HTTP Session. Они управляются весной на @Scope(value = WebApplicationContext.SCOPE_SESSION). Bean будет иметь прокси-сервер, управляя экземплярами вашей службы автоматически.

В этом случае вы не хотите использовать Static Map. Действительно, статический объект является глобальным для вашей программы, и только один экземпляр будет существовать в любое время, например, Singleton.

Если вы определяете сеанс как начало и конец вашего процесса сервера, то в порядке.

Итак, для создания этой карты следует создать статическую карту или создать для нее одноэлементный bean-компонент и использовать autwiring?

Это близко к тому же. Единственное различие заключается в том, как он будет создан. Статическая карта будет создана JVM сразу после загрузки вашего Class. Синглтон Бин будет создан весной при первом использовании.

Главное преимущество Bean в вашем случае - Inversion of Control для вашего Unit Tests.

Я использовал статическую карту, но заметил, что даже после остановки сервера и запустить его снова, экземпляр карты был со значениями из предыдущей сессии

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

Улучшено ли это, если я буду использовать бобы?

Нет, поведение будет таким же.

Не забывайте, что в качестве одноэлементной карты ваша карта должна быть синхронизирована с Collections.synchronizedMap(). В противном случае у вас будут неприятности при использовании.

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