Spring事務管理詳解_基本原理_事務管理方式


1. 事務的基本原理

Spring事務的本質其實就是數據庫對事務的支持,使用JDBC的事務管理機制,就是利用java.sql.Connection對象完成對事務的提交,那在沒有Spring幫我們管理事務之前,我們要怎么做。

Connection conn = DriverManager.getConnection();
try {  
    conn.setAutoCommit(false);  //將自動提交設置為false                         
    執行CRUD操作 
    conn.commit();      //當兩個操作成功后手動提交  
} catch (Exception e) {  
    conn.rollback();    //一旦其中一個操作出錯都將回滾,所有操作都不成功
    e.printStackTrace();  
} finally {
    conn.colse();
}

事務是一系列的動作,一旦其中有一個動作出現錯誤,必須全部回滾,系統將事務中對數據庫的所有已完成的操作全部撤消,滾回到事務開始的狀態,避免出現由於數據不一致而導致的接下來一系列的錯誤。事務的出現是為了確保數據的完整性和一致性,在目前企業級應用開發中,事務管理是必不可少的。

2. 常見spring事務面試題

2.1 什么是事務?

單個邏輯單元執行一系列的事,要么全成功,要么全不執行。

spring事務的本質就是對數據庫事務的支持,沒有數據庫的事務支持,spring是無法完成事務的。

對於純jdbc操作數據庫,使用事務如下:
Connecton con = DriverManager.getConnection();
con.setAutoCommit(false);
//執行crud 操作
con.commint();//提交事務
或者回滾事務 con.rollback();

2.2 spring的核心。

1、spring的核心就是ioc控制反轉跟aop面向切面編程。

2、ioc控制反轉
控制:強調對象是由容器控制的,控制了對外部資源的獲取。
反轉:以前都是我們自己創建對象依賴對象,反轉就是由容器幫我們創建並
注入依賴對象。

3、aop面向切面編程
aop將封裝的對象切開,找出對多個對象產生公共影響的部分,將其封裝成一個可復用的模塊,這個模塊成為切點,切點把不屬於業務層,卻被業務層共同調用的部分進行提取然后封裝。

3. spring事務管理方式

spring支持編程式事務管理和聲明式事務管理兩種方式。

3.1 編程式事務管理(了解)

編程式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於編程式事務管理,spring推薦使用TransactionTemplate。

3.2 聲明式事務管理(重點)

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

3.3 事務管理小結

顯然聲明式事務管理要優於編程式事務管理,這正是spring倡導的非侵入式的開發方式。聲明式事務管理使業務代碼不受污染,一個普通的POJO對象,只要加上注解就可以獲得完全的事務支持。和編程式事務相比,聲明式事務唯一不足地方是,后者的最細粒度只能作用到方法級別,無法做到像編程式事務那樣可以作用到代碼塊級別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進行事務管理的代碼塊獨立為方法等等。

4. 總結

通過這篇文章,你要get到的知識點是“事務的基本概念”、以及spring事務管理的兩種方式。

“事務的基本概念”通常是初級工程師面試的一個熱點。

而spring事務管理的兩種方式,你要明確在實際開發中,用到的只是聲明式事務管理,比如:@Transactional注解;

而聲明式事務注解又有兩種常用的配置方式,所以如果你只知道@Transactional注解是不行的,

下一篇文章將告訴你如何在xml中配置,以致在開發中能夠使用該注解。

 

聲明式事務管理兩種常用的方式(基於tx和aop名字空間的xml配置 + @Transactional注解)

 

本文地址:http://www.cnblogs.com/niceyoo/articles/8729525.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM