Рассматривая путаница в отношении сессионного боба, прокси и синглтонов в приложении Spring 3 Управляемое JSF
-
09-10-2019 - |
Вопрос
Это похоже, что это базовая весной 101 материал, но я не могу найти верный способ сделать это. Ситуация выглядит следующим образом; В моем веб-приложении есть одна точка входа, которая является контроллером, который обрабатывает пользователей, исходящих из внешней системы. Передача просто POST
запрос с группой связанной информации, относящейся к тому пользователю. Вход APON, мне нужно создать новый пользовательский компонент и загрузить его с помощью этой информации пользователей. Кроме того, когда пользователь ударяет представление, которое вызывает некоторую службу, мне нужно для этой услуги, чтобы иметь возможность получить доступ к соответствующему экземпляру пользователя.
Первый способ сделать это, что пришло в голову, имел возможность иметь службу USERMANAGER, которая создаст новый экземпляр пользователя, заполните его с данными, а затем зарегистрируйте его в контейнере пружины с именем пользователя в качестве имени фасоли. Затем, когда сервис вызывается, сервис сделает что-то вроде Factory.getBean(username)
найти соответствующий User
экземпляр. Проблема, которую я вижу вот то, что я теряю связь между пользователем и какой User
боба принадлежит им. Кроме того, я хотел бы избежать того, чтобы пользователь нести боб в сеансе, если вообще возможно. Это где я должен использовать весна AOP & Proxies?
Что такое типичный весенний шаблон для решения этого типа ситуации?
Решение
Так что сейчас много недель спустя (поскольку задавать этот вопрос), и, следовательно, мой уровень знаний расширяется экспоненциально, поэтому я полагал, что я мог бы также ответить на мой вопрос для тех, кто мог бы найти это полезным (не говоря уже о том, что вопрос не был Очень ясно, чтобы начать с).
Основной ответ: использовать прокси. Поскольку Singleton только мгновенно 1 раз, вы не можете вводить другой класс, который имеет более короткий срок службы, например. Сфера сессии. Для тех, кто требует большего количества информации, оформить заказ состояния против синхронизации. Более или менее то, что я в итоге делал, это ... Услуги содержат код без гражданства для манипулирования данными (думаю, глаголы; RegisterUsersvc, addpartsvc, и т. Д.). Данные, которые эти услуги манипулируют, являются штатными. Например, у каждого пользователя есть собственная копия собственного объекта данных, позволяет сказать TOListBean, который находится в другом состоянии для каждого пользователя.
Итак, как работает сервис, AddtodoItemservice, манипулирует этими данными? Это где прокси вступает в игру. При создании экземпляра Addtodoitemservice вводится с прокси-сервером для тодолистского моря вместо фактического объекта. Таким образом, когда служба должна получить доступ к тодолистскому контейнеру, контейнер будет служить a toListbean из текущих сеансов пользователей, и поэтому сервис будет работать на правильном бобовом бону (на основе которого пользователь вызывал сервис), а не делать что-то Глупая как многочисленные копии службы, включенные в каждую область сеанса пользователей.