1. 程式人生 > >【2016-08-15】{全面分析 Spring 的程式設計式事務管理及宣告式事務管理}

【2016-08-15】{全面分析 Spring 的程式設計式事務管理及宣告式事務管理}

       與前面相似,transaction-manager 屬性的預設值是 transactionManager,如果事務管理器 Bean 的名字即為該值,則可以省略該屬性。

       雖然 @Transactional 註解可以作用於介面、介面方法、類以及類方法上,但是 Spring 小組建議不要在介面或者介面方法上使用該註解,因為這隻有在使用基於介面的代理時它才會生效。另外, @Transactional 註解應該只被應用到 public 方法上,這是由 Spring AOP 的本質決定的。如果你在 protected、private 或者預設可見性的方法上使用 @Transactional 註解,這將被忽略,也不會丟擲任何異常。

       基於 <tx> 名稱空間和基於 @Transactional 的事務宣告方式各有優缺點。

        ◊  基於 <tx> 的方式,其優點是與切點表示式結合,功能強大。利用切點表示式,一個配置可以匹配多個方法;

        ◊  而基於 @Transactional 的方式必須在每一個需要使用事務的方法或者類上用 @Transactional 標註,儘管可能大多數事務的規則是一致的,但是對 @Transactional 而言,也無法重用,必須逐個指定。另一方面,基於 @Transactional 的方式使用起來非常簡單明瞭,沒有學習成本。開發人員可以根據需要,任選其中一種使用,甚至也可以根據需要混合使用這兩種方式。

       如果不是對遺留程式碼進行維護,則不建議再使用基於 TransactionInterceptor 以及基於TransactionProxyFactoryBean 的宣告式事務管理方式,但是,學習這兩種方式非常有利於對底層實現的理解。

雖然上面共列舉了四種宣告式事務管理方式,但是這樣的劃分只是為了便於理解,其實後臺的實現方式是一樣的,只是使用者使用的方式不同而已。