春季会话bean

时间:2011-03-11 18:09:48

标签: spring session

<bean id="user" class="com.test.service.beans.User" scope="session">
    <aop:scoped-proxy/>
</bean>

<bean id="userFacade"  class="com.test.service.facade.UserFacadeImpl"  init-method="init">
    <property name="currentUser" ref="user"/>
</bean>

这就是我在当前用户中设置内容的方式(认为它将存储在会话中)

user = userFacade.getUser(userNameorEmail);
userFacade.setCurrentUser(user);

我得到了会话bean的内容 -

User user = userFacade.getCurrentUser();

问题是我将用户视为空

2 个答案:

答案 0 :(得分:2)

这不是它的工作方式。如果你想在会话中存储某些喜欢(它更像是JEE5 / 6中的会话Bean),你必须将它存储在{{1}的字段中}}。 (您可以将此类重命名为UserSession,以使其更清晰。)

简单的例子,使其更清晰:

com.test.service.beans.User

<强>加

  杰瑞问:我的问题是如何更好地设计它?我需要一种方法来检索当前的用户对象 - 所以我在会话范围内创建一个名为SessionObjectBean的bean,我将为currentUser设置getter和setter。这会是一个好的设计吗? 2.此外,currentUser是否也应该在会话范围内? 3.我可以在SessionObjectBean中存储Order之类的其他对象吗?

  • 1)我认为这是一个合理的设计。
  • 2)CurrentUser一定不能是任何Spring Manged Bean。
  • 3)你可以“存储”每个正常! Spring会话作用域中的对象。

答案 1 :(得分:0)

这不是会话bean的工作方式。会话bean不是存储在会话中的bean,它(有效地)是一个bean,其状态存储在会话中。

换句话说,如果您的bean userFacade具有属性currentUser,并且您希望该属性的值存储在会话中,则应使userFacade成为会话 - 豆。然后它的currentUser属性(以及组成其状态的其他属性)将存储在会话中。

而且,据我所知,User根本不应该被声明为Spring bean。