1. 程式人生 > >事務宣告宣告式事務和程式設計式事務介紹

事務宣告宣告式事務和程式設計式事務介紹

事務宣告宣告式事務和程式設計式事務介紹

轉載出處 https://blog.csdn.net/u013083576/article/details/51754567

程式設計式事務:所謂程式設計式事務指的是通過編碼方式實現事務,即類似於JDBC程式設計實現事務管理。管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於程式設計式事務管理,spring推薦使用TransactionTemplate。

宣告式事務:管理建立在AOP之上的。其本質是對方法前後進行攔截,然後在目標方法開始之前建立或者加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務。宣告式事務最大的優點就是不需要通過程式設計的方式管理事務,這樣就不需要在業務邏輯程式碼中摻雜事務管理的程式碼,
只需在配置檔案中做相關的事務規則宣告(或通過基於@Transactional註解的方式),便可以將事務規則應用到業務邏輯中。

       顯然宣告式事務管理要優於程式設計式事務管理,這正是spring倡導的非侵入式的開發方式。

宣告式事務管理使業務程式碼不受汙染,一個普通的POJO物件,只要加上註解就可以獲得完全的事務支援。和程式設計式事務相比,宣告式事務唯一不足地方是,後者的最細粒度只能作用到方法級別,無法做到像程式設計式事務那樣可以作用到程式碼塊級別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進行事務管理的程式碼塊獨立為方法等等。

 

 

擴充套件:

Spring對程式設計式事務的支援

Spring中的事務分為物理事務和邏輯事務;

 

  • 物理事務:就是底層資料庫提供的事務支援,如JDBC或JTA提供的事務;

 

  • 邏輯事務:是Spring管理的事務,不同於物理事務,邏輯事務提供更豐富的控制,而且如果想得到Spring事務管理的好處,必須使用邏輯事務,因此在Spring中如果沒特別強調一般就是邏輯事務;  
  •  

 

邏輯事務解決方案:

 

低級別解決方案: 

 使用工具類獲取連線(會話)和釋放連線(會話),如使用org.springframework.jdbc.datasource包中的DataSourceUtils 類來獲取和釋放具有邏輯事務功能的連線。當然對整合第三方ORM框架也提供了類似的工具類,如對Hibernate提供了SessionFactoryUtils工具類,JPA的EntityManagerFactoryUtils等,

  高級別解決方案:

   使用Spring提供的模板類,如JdbcTemplate、HibernateTemplate和JpaTemplate模板類等,而這些模板類內部其實是使用了低級別解決方案中的工具類來管理連線或會話

 

Spring提供兩種程式設計式事務支援:直接使用PlatformTransactionManager實現和使用TransactionTemplate模板類,用於支援邏輯事務管理。如果採用程式設計式事務推薦使用TransactionTemplate模板類和高級別解決方案