Java bean的Spring会话范围究竟是如何工作的?web上下文中bean的默认作用域是什么?
我正在学习Spring MVC,我有以下疑问:Java bean的Spring会话范围究竟是如何工作的?web上下文中bean的默认作用域是什么?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在学习Spring MVC,我有以下疑问: 会话范围的具体目的是什么? 阅读文档后,我知道这将bean定义的范围限定为HTTP会话。仅在支持web的Spring应用程序上下文的上下文中有效。并且每个用户会话创建一个新实例 但具体什么时候使用?为什么呢?你能举个实际的例子吗 在Spring MVC中,web上下文中的默认作用域是什么? 我知道在春季,bean的默认作用域是singleton,但是在web上下文中bean的作用域呢 对于有状态的bean,您可以使用spring会话bean,每个用
/** * Annotation-based configuration of session scope */
@Component
@Scope("session")
public class ShopCart { }
然后
@Inject
private ShopCart cart;
Ans 2)默认值为到处都是单例。实际上,Spring帮助您创建会话范围bean,而不是传统的方法
httpSession.setAttribute("Object",new Object());
&&
httpSession.getAttribute("Object");
Spring提供了这种有效的方法
@Component
@Scope("session")
public class Foo{
}
现在,使用Factory模式创建和销毁这个关联的会话对象是spring最头疼的事情了。我也遇到了同样的问题,我使用了:
@Component
@Scope("session")
这让我变魔术了:
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
我希望有帮助;-)
但具体什么时候使用?为什么呢?你能做一个简单的决定吗
实例
在我的一个基于JSP的Spring MVC web应用程序中,我们使用它来存储用户在会话中的第一个请求后不会发生变化的数据,即当用户第一次来到服务器时,我们填充这个bean的字段,然后在后续请求(会话中的下一个请求)中使用(aka read)这些值,例如,用户名,用户组织组,地址,登录客户号等
这些常量值是强制性的&在所有日志消息或所有SQL查询中都需要
请求路由的设计方式是,bean填充(bean属性的设置)在每个会话中只发生一次
Yasir Shabbir Choudhary的回答中指出的另一个有趣的部分是,你们可以用传统的方式模仿相同的行为
许多人已经回答了您的第二个问题,默认范围--单例在这里也适用 听起来你好像知道答案。将bean注入web上下文不会改变其默认范围。将bean限定到会话是存储与特定用户会话相关的状态的简便方法。最后,每个会话只有一个实例。下面是一个示例,我使用它为每个用户实例化了一个长时间运行的Drools会话:@Steve Tnx,但如果我真的知道答案,我不会问它。最多我能对可能发生的事情有一个想法,但我完全不确定,因为我正在研究它,我没有经验