Spring之事務 原

一、事務概要

一個數據庫事務通常包含了多個對數據庫的讀/寫操作,它存在包含兩個目的:
1、爲數據庫操作提供了一個從失敗中恢復到正常狀態的方法,同時提供了數據庫即使在異常狀態下仍能保持一致性的方法。
2、當多個應用程序在併發訪問數據庫時,可以在這些應用程序之間提供一個隔離方法,以防止彼此的操作互相干擾。

所以事務是用來處理異常和併發問題的

二、Spring事務

Spring事務的本質其實就是數據庫對事務的支持,沒有數據庫的事務支持,spring是無法提供事務功能的。 Spring支持編程式事務和聲明式事務策略,一般都推薦採用聲明式事務策略。

1、編程式事務:PlatformTransactionManager或TransactionTemplate(推薦)。

2、聲明式事務(1、基於 xml 配置,2、基於註解):使用TransactionProxyFactoryBean來配置事務代理Bean,它是一個專門爲目標Bean生成事務代理的工廠Bean事務代理的方法改寫了目標Bean的方法,就是在目標Bean的方法執行之前加入開始事務,在目標Bean的方法正常結束之前提交事務,如果遇到特定異常則回滾)。Spring的聲明式事務策略是基於Spring AOP的。

Spring中關於事務配置總是由三個組成部分:分別是DataSource、TransactionManager和代理機制這三部分。無論哪種配置方式,一般變化的只是代理機制這部分。DataSource、TransactionManager這兩部分只是會根據數據訪問方式有所變化,比如使用Hibernate進行數據訪問時,DataSource實際爲SessionFactory,TransactionManager的實現爲HibernateTransactionManager。

3、Spring支持7種事務傳播規則。

4、Spring事務管理是通過AOP實施事務增強(基於接口代理或動態字節碼技術)。

基於接口動態代理的AOP事務增強,接口方法必須都是public的,實現類的方法也必須都是public的,不能夠有protected、private、final。
基於CGLib字節碼動態代理的方案是通過擴展被增強類,動態創建子類的方式進行AOP增強植入的,由於final、static、private修飾的方法不能夠被子類覆蓋就無法實施AOP增強。

5、filter和interceptor區別:

過濾器(filter)和攔截器(interceptor,就是AOP的一種實現策略)主要區別如下:

a、二者適用範圍不同。Filter是Servlet規範規定的,只能用於Web程序中,而攔截器既可以用於Web程序,也可以用於Application、Swing程序中。
b、規範不同。Filter是在Servlet規範定義的,是Servlet容器支持的,而攔截器是在Spring容器內的,是Spring框架支持的。
c、使用的資源不同。同其他代碼塊一樣,攔截器也是一個Spring的組件,歸Spring管理,配置在Spring文件中,因此能使用Spring裏的任何資源、對象(各種bean),而Filter不行。
d、深度不同。Filter只在Servlet前後起作用,而攔截器能夠深入到方法前後、異常跑出前後等,攔截器的使用有更大的彈性。

 

Ref:

https://my.oschina.net/u/175660/blog/34843

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