2011-03-11 122 views
11

我幾次閱讀關於這個主題的春季文檔,但有些東西對我來說還不清楚。 文檔狀態:Spring會話範圍的bean作爲原型bean中的依賴關係嗎?

如果要注入(例如)HTTP請求範圍的bean到另一個bean,你必須到位的作用域bean注入一個AOP代理。也就是說,您需要注入一個代理對象,該對象公開與作用域對象相同的公共接口,但也可以從相關作用域(例如,HTTP請求)中檢索真實的目標對象,並將方法調用委託給實際對象。

配置例子如下:

<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"> 
    <aop:scoped-proxy/> 
</bean> 

<bean id="userManager" class="com.foo.UserManager"> 
    <property name="userPreferences" ref="userPreferences"/> 
</bean> 

這裏,的UserManager豆的作用域確定爲單例。所以,我想知道這個代理的東西是否應用只有單身作用域的豆,也就是說,如果你想注入web作用域bean到單身bean,或者它也適用於原型豆?例如,如果userManager被限定爲原型?

我在問這是因爲我看到一些代碼將會話範圍的bean注入到沒有aop代理的原型中,但我不確定這是否正確......特別是那些在某些web中的DAO bean -app,範圍爲會話,並且它們被注入到用於多用戶環境的原型範圍的控制器中。這是正確的路嗎?一般情況下應該如何將DAO/Service bean作用於web-app環境?

任何想法,將不勝感激。

回答

22

您可以始終將更廣泛的bean(例如單例)注入到更窄範圍的bean(例如會話範圍的bean)中,但反過來,您需要一個scoped-proxy。

因此,將會話範圍的bean注入到原型範圍的bean中的示例沒有問題,因爲會話範圍比原型範圍「更寬」。

如果你弄錯了,那麼Spring會告訴你。如果它不抱怨,那麼你不需要它。

相關問題