Spring的“会话”范围是一个bean

时间:2010-05-07 13:15:53

标签: java spring scope

在我看来,“会话”范围是将对象保持在会话中的另一种方法

使用setAttrubute / getAttribute

正确?

你知道,不知道为什么,它对我不起作用。

< bean id =“sabreUser”class =“util.MyUser”factory-method =“getSomeUser”scope =“session”>

< const args ...>

我看到的是,在初始化和初始部署之后,MyUser属性是正确的。

然后,在第一个会话中,我更改了MyUser属性,会话已关闭。

第二个会话运行,它会看到上一个会话的最后一个设置值!

这是什么意思?

我希望每当新会话开始时都会初始化此对象。但它最好看起来像单身,但你看 - “会话”属性设置。

我可以通过@Autowired初始化Servlet的字段来查看问题的原因 因此,一旦初始化,每个其他会话将看到其字段设置,并且不“重新连接”此属性。它发生一次?如何克服这个问题?

3 个答案:

答案 0 :(得分:1)

会话范围的bean是遍及http会话的bean。它们以某种方式通过setAttribute存储在会话中。

所以 - 是的。

答案 1 :(得分:1)

Spring会话与HttpSession并不完全匹配,甚至关于@SessionAttributes注释的Spring文档也说它可能存储在会话或“某些会话存储”中。我从The Spring docs for 2.5那里得到了 我基本上已经放弃了尝试理解它,只是继续我的生活,如果我想要存储在HttpSession中的东西,我只是让Spring注入HttpSession给我,假设你使用Spring MVC很简单,同一页上的说明。

答案 2 :(得分:1)

会话范围的bean由Spring框架存储在Http Session中。此范围仅在Web应用程序的上下文中有效。它也适用于Portlet环境。在Portlet环境中使用时,会话,应用程序范围和portlet范围有两种概念(默认)。