<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的任何请求都将返回相同的对象,但每个会话的用户都会有所不同 - 单身内部的概念会话让我感到困惑。有人可以解释一下吗?
答案 0 :(得分:2)
“范围代理”是User
bean周围的透明包装器。当调用该代理上的方法时,它将使用Spring的线程本地机制(称为HttpSession
)查找当前RequestContextHolder
,然后从会话内部获取User
对象属性。如果该会话中不存在,则会创建一个新会话并将其存储在会话中。然后调用User
上的“真实”方法。
使用范围代理的一个重要警告是,只有在范围是“活动”的情况下才能调用代理的方法,例如如果当前正在执行的线程是servlet请求。
答案 1 :(得分:1)