有关Spring 3托管JSF应用程序中会话bean,代理和单例的范围混淆

这看起来像是Spring 101的基本内容,但我似乎找不到正确的方法来做到这一点。情况如下;在我的Web应用程序中,有一个入口点是一个控制器,用于处理来自外部系统的用户。转移只是一个
POST
请求,其中包含一系列与该用户相关的相关信息。在Apon条目中,我需要创建一个新的User bean并使用该用户信息加载它。此外,当用户点击触发某些服务的视图时,我需要该服务能够访问相应的User bean实例。 想到这一点的第一种方法是创建一个UserManager服务,它将创建一个User的新实例,用数据填充它,然后在用户名作为bean名称的Spring容器中注册它。然后,当调用服务时,服务将执行类似
Factory.getBean(username)
的操作以查找适当的
User
实例。我在这里看到的问题是我失去了用户与用户之间的联系。哪个
User
豆属于他们。另外,如果可能的话,我想避免让用户在会话中携带bean。这是我应该使用Spring AOP&代理? 解决此类情况的典型Spring模式是什么?     
已邀请:
所以现在好几周之后(自问这个问题以来),因此我的知识水平呈指数级增长,所以我想我也可以回答我的问题给任何可能觉得有帮助的人(更不用说问题不是非常清楚,开始)。 基本答案是:使用代理。由于单例只是实例化1次,你不能注入另一个寿命较短的类,例如。会话范围。对于那些需要更多信息的人,请检查有状态与无状态bean。或多或少我最终做的是......服务包含用于操作数据的STATELESS代码(思考动词; RegisterUserSvc,AddPartSvc等)。这些服务操纵的数据是有状态的。例如,每个用户都有自己的数据对象的副本,比如TodoListBean,它对每个用户都处于不同的状态。 那么,例如AddTodoItemService服务如何操纵这些数据呢?这是代理发挥作用的地方。实例化时,AddTodoItemService将注入TodoListBean的代理,而不是实际对象。这样,当服务需要访问TodoListBean时,容器将从当前用户会话中提供TodoListBean,因此服务将在正确的bean上运行(基于哪个用户调用了服务),而不是做某事愚蠢的是,每个用户会话范围中都包含许多服务副本。     

要回复问题请先登录注册