单身和范围

时间:2011-03-08 18:16:47

标签: spring scope javabeans

<bean id="userFacade" class="com.test.facade.UserFacadeImpl">
            <property name="userDao" ref="userDao"/>
            <property name="currentUser" ref="user"/>
</bean>
<bean id="user" class="com.test.beans.User" scope="session">
    <aop:scoped-proxy/>
</bean>

UserDao和用户被传递给它 - 用户是作为范围和外观的单身人士。因此,对userfacade的任何请求都将返回相同的对象,但每个会话的用户都会有所不同 - 单身内部的概念会话让我感到困惑。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

“范围代理”是User bean周围的透明包装器。当调用该代理上的方法时,它将使用Spring的线程本地机制(称为HttpSession)查找当前RequestContextHolder,然后从会话内部获取User对象属性。如果该会话中不存在,则会创建一个新会话并将其存储在会话中。然后调用User上的“真实”方法。

使用范围代理的一个重要警告是,只有在范围是“活动”的情况下才能调用代理的方法,例如如果当前正在执行的线程是servlet请求。

答案 1 :(得分:1)

注入User的{​​{1}}实例是一个代理,它将方法调用委托给UserFacadeImpl的实际会话范围实例。

另见: