![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CNzkzN3MzY3ETYidjNmRWO0MTZmVGOmJmY2cDNwMWZl9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
事務管理的核心接口
在Spring的所有JAR包中,包含一個名為spring-tx-4.3.6.RELEASE的JAR包,該包就是Spring提供的用于事務管理的依賴包。在該JAR包的org.springframework.transaction包中,我們可以找到3個接口檔案PlatformTransactionManager、TransactionDefinition和TransactionStatus,如圖5-1所示。
在圖5-1中,方框标注的3個接口檔案就是Spring事務管理所涉及的3個核心接口,接下來對這3個接口的作用分别進行講解。
1.PlatformTransactionManager
PlatformTransactionManager接口是Spring提供的平台事務管理器,主要用于管理事務。該接口中提供了3個事務操作的方法,具體如下。
· TransactionStatus getTransaction(TransactionDefinition definition):用于擷取事務狀态資訊。
· void commit(TransactionStatus status):用于送出事務。
· void rollback(TransactionStatus status):用于復原事務。
在上面的3個方法中,getTransaction(TransactionDefinition definition)方法會根據TransactionDefinition參數傳回一個TransactionStatus對象,TransactionStatus對象就表示一個事務,它被關聯在目前執行的線程上。
PlatformTransactionManager接口隻是代表事務管理的接口,它并不知道底層是如何管理事務的,它隻需要事務管理提供上面的3個方法,但具體如何管理事務則由它的實作類來完成。
PlatformTransactionManager接口有許多不同的實作類,常見的幾個實作類如下。
· org.springframework.jdbc.datasource.DataSourceTransactionManager:用于配置JDBC資料源的事務管理器。
· org.springframework.orm.hibernate4.HibernateTransactionManager:用于配置Hibernate的事務管理器。
· org.springframework.transaction.jta.JtaTransactionManager:用于配置全局事務管理器。當底層采用不同的持久層技術時,系統隻需使用不同的PlatformTransactionManager實作類即可。
2.TransactionDefinition
TransactionDefinition接口是事務定義(描述)的對象,該對象中定義了事務規則,并提供了擷取事務相關資訊的方法,具體如下。
· String getName():擷取事務對象名稱。
· int getIsolationLevel():擷取事務的隔離級别。
· int getPropagationBehavior():擷取事務的傳播行為。
· int getTimeout():擷取事務的逾時時間。
· boolean isReadOnly():擷取事務是否隻讀。
上述方法中,事務的傳播行為是指在同一個方法中,不同操作前後所使用的事務。傳播行為有很多種,具體如表5-1所示。
在事務管理過程中,傳播行為可以控制是否需要建立事務以及如何建立事務,通常情況下,資料的查詢不會影響原資料的改變,是以不需要進行事務管理,而對于資料的插入、更新和删除操作,必須進行事務管理。如果沒有指定事務的傳播行為,Spring預設傳播行為是REQUIRED。
3.TransactionStatus
TransactionStatus接口是事務的狀态,它描述了某一時間點上事務的狀态資訊。該接口中包含6個方法,具體如下。
· void flush():重新整理事務。
· boolean hasSavepoint():擷取是否存在儲存點。
· boolean isCompleted():擷取事務是否完成。
· boolean isNewTransaction():擷取是否是新事務。
· boolean isRollbackOnly():擷取是否復原。
· void setRollbackOnly():設定事務復原。
事務管理的方式
Spring中的事務管理分為兩種方式:一種是傳統的程式設計式事務管理,另一種是聲明式事務管理。
· 程式設計式事務管理:是通過編寫代碼實作的事務管理,包括定義事務的開始、正常執行後的事務送出和異常時的事務復原。
· 聲明式事務管理:是通過AOP技術實作的事務管理,其主要思想是将事務管理作為一個“切面”代碼單獨編寫,然後通過AOP技術将事務管理的“切面”代碼織入到業務目标類中。
聲明式事務管理最大的優點在于開發者無須通過程式設計的方式來管理事務,隻需在配置檔案中進行相關的事務規則聲明,就可以将事務規則應用到業務邏輯中。這使得開發人員可以更加專注于核心業務邏輯代碼的編寫,在一定程度上減少了工作量,提高了開發效率,是以在實際開發中,通常都推薦使用聲明式事務管理。本書主要講解的就是Spring的聲明式事務管理。