Пишу веб-приложение в учебных целях в котором присутствует авторизация пользователей, и далее, для авторизованного пользователя доступна некоторая логика (добавлять элементы, удалять их из обычного List).
Использую Spring fraemwork и аннотацию Controller для создания, непосредственно, контроллеров. Вопрос в следующем:
Если сразу несколько пользователей обращаются к моему сервису, то как происходит обработка этих запросов контроллером? На каждого пользователя создается свой контроллер, и то есть для каждого пользователя будет создан уникальный ArrayList и доступа к нему (изменению) у других пользователей не будет? (Понимаю, что маловероятно, потому что для большого количества пользователей не хватит никакой оперативной памяти)
Или же один контроллер может обрабатывать сразу запросы нескольких пользователей? И тогда несколько пользователей будут редактировать один и тот же объект? И если так, то как в этом случае лучше поступить? Создавать Map>? Или есть другие более правильные способы?
В интернете особо информации по этому вопросу не нашел.
Как я понимаю из вашего вопроса вы интересуетесь тем можно хранить какую либо информацию (состояние) для каждого пользователя отдельно.
По умолчанию все компоненты (@Controller/@Service/@Component) являются Singleton и при обращении к ним создаются в единственном экземпляре. И все запросы пользователей будут адресоваться к экземплярам одного и того же объекта.
Однако объекты модели с которыми взаимодействуют контроллеры вполне могут быть уникальными для каждого пользователя так как в Spring есть штатная возможность работы на уровне сессий. Для этого можно обратится к аннотации @SessionAttributes. Пример использования можно посмотреть здесь.
В этом случае вам не придется создавать по контроллеру на каждого пользователя, а объекты будут привязаны к сессии - то есть будут уничтожены итерацией gc после завершения сессии то есть их время жизни более менее будет сопоставимо с самой сессией.
По умолчанию в Spring все компоненты синглетоны - классы имею единственный экземпляр в течении всей жизни программы и загружаются они во время запуска приложения. Поэтому по умолчанию единственный экземпляр компонента обрабатывает запросы от всех пользователей. Можно задать компоненту @Scope("prototype"), тогда при каждом обращении будет создаваться новый экземпляр компонента.
Через компоненты вы редактируете сущности а не компоненты. Два пользователя не должны редактировать одну сущность - это больше вопрос к уровням изоляции транзакций.
Возможно не совсем понятен ваш вопрос. Какую конкретную задачу вы хотите решить?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Народ, всем привет, кто нашел время и желание отозваться! Сделал адаптацию сайта под различные устройства через @media min-width и max-width (от 0 до 560px)...
Доброго времени суток друзьяВ проекте имплементированная библиотека стилей Bootstrap перекрывает стили css прописанные в ручную
В этом коде, я присваиваю указателю current адрес в памяти, на который указывает указатель, который возвращает функция listen_port, и передаю current в функцию,...