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

1. 事務的基本原理

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

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

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

2. 常見spring事務面試題

2.1 什麼是事務?

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

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

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

2.2 spring的核心。

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

二、ioc控制反轉
控制:強調對象是由容器控制的,控制了對外部資源的獲取。
反轉:之前都是咱們本身建立對象依賴對象,反轉就是由容器幫咱們建立並
注入依賴對象。編程

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

3. spring事務管理方式

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

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

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

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

相關文章
相關標籤/搜索