2012-12-18 42 views
1

考慮一個定義操作opA(class opA)的spring管理web服務。將針對該操作的每個請求創建一個opA對象的單獨實例。在webservice中使用Spring管理bean的競爭條件

Class opA{ 

@Autowired 
B objB; 

} 

Class B{ 

C objC; 
. 
. 
} 

Class C{ 
. 
. 
. 
} 

<bean id="objB" class="blah.blah.B"> 
<property name="objC"> 
    <bean class="blah.blah.C"/> 
    </property> 
</bean> 

注:OPA也由彈簧

這裏objB是彈簧單範圍具有內部豆objC的對象所管理。現在,如果兩個opA請求同時到達,它們都將具有相同的objB實例嗎?導致objB中objC的狀態可能出現競爭狀態。我對麼?如果不是,你可以解釋爲什麼?

回答

1

你有狀態的單一實例的二手周圍的所有應用程序,所以我會說,你可能有競爭條件,但要看你是什麼state(是objB服務和objC信息庫?)和你的實現。

+0

objB一個簡單的Dao和objC是一個像「地圖」的容器,它將保存由Doa收集的值 – broun

+0

然後是的,沒有同步廣告取決於您的實現,您可以讓不同的線程彼此步進。正如@ Clockwork-Muse所提到的那樣,Spring是無關緊要的,但更多的是關於無狀態與有狀態。作爲一般規則,您應該嘗試使對象成爲無狀態/不可變的,因爲它們是線程安全的。 –