2011-03-08 209 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請求。