2011-03-08 116 views
1
<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的任何请求都将返回一个相同的对象,但每个会话的用户都会有所不同 - 单身人士中的概念会话会让我感到困惑。有人可以解释吗?单身人士和范围

回答

1

注入到UserFacadeImpl中的User实例是一个代理,它将方法调用委托给User的实际会话作用域实例。

参见:

+0

哦!好的,以便正在做什么。我指的是一些例子,我看到UserFacadeImpl被标注为@Service,它是什么意思,它与@Resource有什么不同。 – 2011-03-08 18:26:31

+0

@Jerry:请参阅http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-annotation-config – axtavt 2011-03-08 18:55:07

2

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

带有作用域代理的大问题是代理的方法只能在范围为“活动”的情况下才能被调用,例如,如果当前正在执行的线程是一个servlet请求。