这似乎是基本的春季101件东西,但我似乎找不到 正确的 做到这一点的方法。情况如下;在我的Web应用程序中,有一个单个入口点是一个控制器,该控制器处理来自外部系统的用户。转移只是一个 POST 请求与该用户有关的大量关联信息。 APON条目,我需要创建一个新的用户bean并加载该用户信息。此外,当用户击中触发某些服务的视图时,我需要该服务才能访问适当的用户bean实例。

想到的第一种方法是拥有一个UserManager服务,该服务将创建一个新的用户实例,填充数据,然后在弹簧容器中以用户名作为bean名称注册。然后,当调用服务时,该服务将做类似的事情 Factory.getBean(username) 找到合适的 User 实例。我在这里看到的问题是,我正在失去用户之间的链接 User 豆属于他们。此外,如果可能的话,我想避免在会话中随身携带豆子。这是我应该使用Spring Aop&Proxies的地方吗?

解决这种情况的典型春季模式是什么?

有帮助吗?

解决方案

因此,现在已经是几周后(自从提出这个问题以来),因此我的知识水平已经成倍扩展,所以我认为我不妨为任何可能会有所帮助的人回答我的问题(更不用说这个问题不是一开始很清楚)。

基本答案是:使用代理。由于单身人士只是实例化的1次,因此您不能注入另一个寿命较短的类,例如。会话范围。对于需要更多信息的人,请查看状态与无状态豆。我最终做的或多或少是...服务包含用于操纵数据的无状态代码(想想动词; registerusersvc,addPartsvc等)。这些服务操纵的数据是有状态的。例如,每个用户都有自己的数据对象的副本,可以说TodolistBean对每个用户处于不同状态。

那么,如何操纵这些数据,如何操纵此数据?这是代理人发挥作用的地方。实例化时,AddTodoItemService将注入托物的代理,而不是实际对象。这样,当服务需要访问TodolistBean时,容器将在当前用户会话中为a todolistbean提供服务,因此该服务将在正确的bean上运行(基于用户调用服务),而不是做某事愚蠢的喜欢在每个用户会话范围中包含许多服务副本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top