Java Spring会话范围bean是否保存在HttpSession中?
因为我对spring会话范围实现没有深入的了解。 有谁能告诉我使用Spring会话范围的bean是否明智,其中HttpSession对象非常重要。就像成千上万的用户同时访问网站的web应用程序一样 spring会话范围bean是否保存在HttpSession对象中 或者,即使HttpSession对象只引用spring会话范围的bean,我们是否没有使会话对象变得沉重Java Spring会话范围bean是否保存在HttpSession中?,java,spring,servlets,inversion-of-control,httpsession,Java,Spring,Servlets,Inversion Of Control,Httpsession,因为我对spring会话范围实现没有深入的了解。 有谁能告诉我使用Spring会话范围的bean是否明智,其中HttpSession对象非常重要。就像成千上万的用户同时访问网站的web应用程序一样 spring会话范围bean是否保存在HttpSession对象中 或者,即使HttpSession对象只引用spring会话范围的bean,我们是否没有使会话对象变得沉重 与直接在HttpSession对象中存储任何bean有什么不同(从观点上看,使HttpSession对象变得沉重)?Spring
与直接在HttpSession对象中存储任何bean有什么不同(从观点上看,使HttpSession对象变得沉重)?Spring文档是这样说的: 将单个bean定义限定为HTTP会话的生命周期。 仅在支持web的Spring应用程序上下文的上下文中有效 “重”?不比你放进去的东西重。会话应具有有限的生存期。每个会话的几KB并不是应用程序的结束。对同时会话数和对象内存需求的简单计算应该可以让您放心您的应用程序服务器内存设置。如果需要,您可以随时增加最小和最大内存
无论您是否是Springbean,在HTTP会话中存储内容的情况都是一样的。bean工厂只是做了一些额外的事情来帮助您管理对象的生命周期。对象并没有真正存储在HTTP会话中。它与会话id链接,并实际存储在Spring上下文中。会话侦听器用于在会话关闭后清理实例。请参阅JavaDoc。spring会话范围的bean是否保存在HttpSession对象中? 如果您在这里提到的HttpSession对象实际上是由spring会话提供的(spring会话将HttpSession对象包装在原始httpRequest中),那么答案将是YES->实际上,所有spring会话范围的bean都作为属性保存在spring会话提供的HttpSession中 或者即使HttpSession对象只引用spring会话范围的bean,我们是否没有使会话对象变得沉重? 不会。httpSession的“重量”很大程度上取决于您放入的对象。此外,会话bean是短暂的。最后但并非最不重要的一点是,micro services世界中的会话对象通常被卸载到独立的存储中,如Redis或HazelCast。因此,就内存消耗而言,它不会被认为是“沉重的” 与直接在HttpSession对象中存储任何bean有什么不同(使HttpSession对象变得沉重)?
没有任何区别(假设您使用的是spring sesion),因为所有spring会话范围内的bean都作为属性保存在spring会话提供的httpSession中。我不确定您是否错了(我现在很想跳转到spring源代码),但是集群中的会话复制呢?我很难相信这就是弹簧的工作原理!从Spring源代码来看,这似乎并不准确。会话范围的bean实际上存储在
HttpSession
对象本身中SessionScope
最终会调用ServletRequestAttributes.setAttribute()
。