javascript
Spring事务管理详解_基本原理_事务管理方式
Spring事務(wù)管理詳解_基本原理_事務(wù)管理方式
1. 事務(wù)的基本原理
Spring事務(wù)的本質(zhì)其實(shí)就是數(shù)據(jù)庫對事務(wù)的支持,使用JDBC的事務(wù)管理機(jī)制,就是利用java.sql.Connection對象完成對事務(wù)的提交,那在沒有Spring幫我們管理事務(wù)之前,我們要怎么做。
Connection conn = DriverManager.getConnection(); try { conn.setAutoCommit(false); //將自動(dòng)提交設(shè)置為false 執(zhí)行CRUD操作 conn.commit(); //當(dāng)兩個(gè)操作成功后手動(dòng)提交 } catch (Exception e) { conn.rollback(); //一旦其中一個(gè)操作出錯(cuò)都將回滾,所有操作都不成功 e.printStackTrace(); } finally {conn.colse(); }事務(wù)是一系列的動(dòng)作,一旦其中有一個(gè)動(dòng)作出現(xiàn)錯(cuò)誤,必須全部回滾,系統(tǒng)將事務(wù)中對數(shù)據(jù)庫的所有已完成的操作全部撤消,滾回到事務(wù)開始的狀態(tài),避免出現(xiàn)由于數(shù)據(jù)不一致而導(dǎo)致的接下來一系列的錯(cuò)誤。事務(wù)的出現(xiàn)是為了確保數(shù)據(jù)的完整性和一致性,在目前企業(yè)級(jí)應(yīng)用開發(fā)中,事務(wù)管理是必不可少的。
2. 常見spring事務(wù)面試題
2.1 什么是事務(wù)?
單個(gè)邏輯單元執(zhí)行一系列的事,要么全成功,要么全不執(zhí)行。
spring事務(wù)的本質(zhì)就是對數(shù)據(jù)庫事務(wù)的支持,沒有數(shù)據(jù)庫的事務(wù)支持,spring是無法完成事務(wù)的。
對于純jdbc操作數(shù)據(jù)庫,使用事務(wù)如下:
Connecton con = DriverManager.getConnection();
con.setAutoCommit(false);
//執(zhí)行crud 操作
con.commint();//提交事務(wù)
或者回滾事務(wù) con.rollback();
2.2 spring的核心。
1、spring的核心就是ioc控制反轉(zhuǎn)跟aop面向切面編程。
2、ioc控制反轉(zhuǎn)
控制:強(qiáng)調(diào)對象是由容器控制的,控制了對外部資源的獲取。
反轉(zhuǎn):以前都是我們自己創(chuàng)建對象依賴對象,反轉(zhuǎn)就是由容器幫我們創(chuàng)建并
注入依賴對象。
3、aop面向切面編程
aop將封裝的對象切開,找出對多個(gè)對象產(chǎn)生公共影響的部分,將其封裝成一個(gè)可復(fù)用的模塊,這個(gè)模塊成為切點(diǎn),切點(diǎn)把不屬于業(yè)務(wù)層,卻被業(yè)務(wù)層共同調(diào)用的部分進(jìn)行提取然后封裝。
3. spring事務(wù)管理方式
spring支持編程式事務(wù)管理和聲明式事務(wù)管理兩種方式。
3.1 編程式事務(wù)管理(了解)
編程式事務(wù)管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對于編程式事務(wù)管理,spring推薦使用TransactionTemplate。
3.2 聲明式事務(wù)管理(重點(diǎn))
聲明式事務(wù)管理建立在AOP之上的。其本質(zhì)是對方法前后進(jìn)行攔截,然后在目標(biāo)方法開始之前創(chuàng)建或者加入一個(gè)事務(wù),在執(zhí)行完目標(biāo)方法之后根據(jù)執(zhí)行情況提交或者回滾事務(wù)。聲明式事務(wù)最大的優(yōu)點(diǎn)就是不需要通過編程的方式管理事務(wù),這樣就不需要在業(yè)務(wù)邏輯代碼中摻雜事務(wù)管理的代碼,只需在配置文件中做相關(guān)的事務(wù)規(guī)則聲明(或通過基于@Transactional注解的方式),便可以將事務(wù)規(guī)則應(yīng)用到業(yè)務(wù)邏輯中。
3.3 事務(wù)管理小結(jié)
顯然聲明式事務(wù)管理要優(yōu)于編程式事務(wù)管理,這正是spring倡導(dǎo)的非侵入式的開發(fā)方式。聲明式事務(wù)管理使業(yè)務(wù)代碼不受污染,一個(gè)普通的POJO對象,只要加上注解就可以獲得完全的事務(wù)支持。和編程式事務(wù)相比,聲明式事務(wù)唯一不足地方是,后者的最細(xì)粒度只能作用到方法級(jí)別,無法做到像編程式事務(wù)那樣可以作用到代碼塊級(jí)別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進(jìn)行事務(wù)管理的代碼塊獨(dú)立為方法等等。
4. 總結(jié)
通過這篇文章,你要get到的知識(shí)點(diǎn)是“事務(wù)的基本概念”、以及spring事務(wù)管理的兩種方式。
“事務(wù)的基本概念”通常是初級(jí)工程師面試的一個(gè)熱點(diǎn)。
而spring事務(wù)管理的兩種方式,你要明確在實(shí)際開發(fā)中,用到的只是聲明式事務(wù)管理,比如:@Transactional注解;
而聲明式事務(wù)注解又有兩種常用的配置方式,所以如果你只知道@Transactional注解是不行的,
下一篇文章將告訴你如何在xml中配置,以致在開發(fā)中能夠使用該注解。
?
聲明式事務(wù)管理兩種常用的方式(基于tx和aop名字空間的xml配置 + @Transactional注解)
?
本文地址:http://www.cnblogs.com/niceyoo/articles/8729525.html
?
posted @ 2018-04-07 00:12 niceyoo 閱讀(...) 評(píng)論(...) 編輯 收藏總結(jié)
以上是生活随笔為你收集整理的Spring事务管理详解_基本原理_事务管理方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS软件工程师课程分享
- 下一篇: Spring Security 入门(1