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