2012-09-19 220 views
0

我是新的Spring用戶。 我有一個關於範圍和交易的問題。春季交易範圍

例如,有一個服務:

<bean id="bankInDaoService" class="service.dao.impl.UserDaoServiceImpl"> 

比方說,有2人誰希望銀行在該同時。 而我已經把上面的@Transactional用於Hibernate事務處理用於存入目的的方法。

我的問題是:

  1. 由於默認春範圍是單身。這兩個人會分享相同的價值嗎? (人1銀行500,人2銀行500)?
  2. @Transactional會有效嗎?我的意思是讓第一個人結束銀行存入,然後是第二個人。

我會非常感謝您的幫助。

回答

1

你是正確的,默認情況下,Spring bean是單身人士。但是這不會成爲一個問題,除非你的實現修改了每個調用的內部狀態(這很奇怪 - 通常一個服務方法只能使用它給出的參數)。

正如我剛纔所提到的,每個服務方法調用都會有自己的參數;即:

deposit(person1_ID, 500) 

deposit(person2_ID, 750) 

正如你說:「在同一時間,」我們可以安全地假設我們正在處理這兩個同時的人,每個線程一個多線程的服務器。方法參數放置在任何給定線程的堆棧上 - 所以就您的服務而言,兩個人的存款之間絕對沒有連接/腐敗的可能性。

現在轉向@Transactional註釋:Spring使用「問題」來實現這一行爲,並再次會單獨應用到每個執行線程,並且是獨立的。

如果您正在尋找@Transactional執行某種排序(例如,你想PERSON2到退出沉積的確切數額PERSON1 ),那麼你需要寫在同時執行操作的新方法在一個@Transactional範圍內的序列。

0

您錯誤地理解了@Transactional註釋的用法。

@Transactional註釋中使用的情況下,你想獲得全部或沒有您的交易是成功的。如果任何交易失敗,則其他成功的交易將被回滾。這不是爲了同步。

如果你有註冊頁面,您需要輸入10個字段和5是表用戶和5是表的公司,你是從單一服務功能inseting均有記載。那時你應該使用@Transactional註解。如果插入在用戶表中成功並且在公司表中失敗,則用戶表記錄將被回滾。

希望這可以幫助你。乾杯。