事務聲明聲明式事務和編程式事務介紹

事務聲明聲明式事務和編程式事務介紹

轉載出處 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模板類和高級別解決方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章