自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳細(xì)介紹Spring事務(wù)管理

開發(fā) 后端
本文詳細(xì)介紹Spring事務(wù)管理,包括Spring事務(wù)管理的兩種方式——編程式和聲明式。

在學(xué)習(xí)spring事務(wù)管理時,我忍不住要問,spring為什么進(jìn)行事務(wù)管理,spring怎么進(jìn)行的事務(wù)管理?首先,為什么要進(jìn)行事務(wù),接下來說說spring是怎樣進(jìn)行事務(wù)管理的.


Spring事務(wù)策略

Spring事務(wù)策略,也就是spring事務(wù)管理的實(shí)現(xiàn)方式.它有一個統(tǒng)一的抽象是由實(shí)現(xiàn)下面這個接口完成的.org.springframework.transaction.PlatformTransactionManager
此接口的內(nèi)容如下:

  1. Public interface PlatformTransactionManager()...{  
  2. TransactionStatue getTransaction(TransactionDefinition definition) throws TransactionException;  
  3. Void commit(TransactionStatus status) throws TransactionException;  
  4. Void rollback(TransactionStatus status) throws TransactionException;  

不管是聲明式的還是編程式的事務(wù)管理都需要此抽象來完成.
解釋一下這個接口,這樣可以更好的理解spring的事務(wù)控制的原理.
getTransaction() 根據(jù)類型為TransactionDefinition的參數(shù)返回一個TransactionStatus對象.返回的 TransactionStatus對象可能代表一個新的或已經(jīng)存在的事務(wù)(如果在當(dāng)前調(diào)用堆棧有一個符合條件的事務(wù)).如同J2EE事務(wù)上下文,一個 TransactionStatus也是和執(zhí)行的線程關(guān)聯(lián)的.
同時,在框架中還存在TransactionDefinition接口,即上邊的參數(shù)類型.此接口指定了事務(wù)隔離程度、事務(wù)傳播、事務(wù)超時、只讀狀態(tài)。
另外,還有TransactionStatus接口。這個接口為處理事務(wù)提供簡單的控制事務(wù)執(zhí)行和查詢事務(wù)狀態(tài)的方法。

兩種Spring事務(wù)管理方式:編程式、聲明式。

Spring提供兩種方式的編程式事務(wù)管理,分別是:使用TransactionTemplate和直接使用PlatformTransactionManager。

1.TransactionTempale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate一樣的方法。它使用回調(diào)方法,把應(yīng)用程序從處理取得和釋放資源中解脫出來。如同其他模板,TransactionTemplate是線程安全的。代碼片段:

  1. Object result = tt.execute(new TransactionCallback()...{  
  2. public Object doTransaction(TransactionStatus status)...{  
  3. updateOperation();  
  4. return resultOfUpdateOperation();  
  5. }  
  6. }); 

使用TransactionCallback()可以返回一個值。如果使用TransactionCallbackWithoutResult則沒有返回值。

2.也可以使用PlatformTransactionManager直接管理事務(wù)。簡單地通過一個bean引用給你的bean傳遞一個你使用的 PlatformTransaction對象。然后,使用TransactionDefinition和TransactionStatus對象就可以發(fā)起、回滾、提交事務(wù)。如下片段:

  1. DefaultTransactionDefinition defnew DefaultTransactionDefinition(); //new 一個事務(wù)              def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); //                                                    初始化事務(wù),參數(shù)定義事務(wù)的傳播類型; TransactionStatus status =                                   transactionManager.getTransaction(def); //獲得事務(wù)狀態(tài) try...{ ……………..                                 transactionManager.commit(status); //提交事務(wù); }catch(…..)...{                                                   transactionManager.rollback(status); //回滾事務(wù); }  

Spring也提供聲明式事務(wù)管理。這是通過AOP實(shí)現(xiàn)的。大多數(shù)Spring用戶選擇聲明式事務(wù)管理,這是最少影響應(yīng)用代碼的選擇,因而這是和非侵入性的輕量級容器的觀念是一致的。

1)通常通過TransactionProxyFactoryBean設(shè)置Spring事務(wù)代理。需要一個目標(biāo)對象包裝在事務(wù)代理中。這個目標(biāo)對象一般是一個普通Javabean。當(dāng)我們定義TransactionProxyFactoryBean時,必須提供一個相關(guān)的 PlatformTransactionManager的引用和事務(wù)屬性。事務(wù)屬性含有事務(wù)定義。例如:

  1. <bean id="transactionService"class="org.springframework.                    transaction.interceptor.TransactionProxyFactoryBean"> 
  2. <property name="transactionManager"> 
  3. <ref   local="transactionManager"/> 
  4. property> 
  5. <property  name="target"> 
  6. <ref  local="transactionServiceControl"/> 
  7. property> 
  8. <property  name="transactionAttributes"> 
  9. <props> 
  10. <prop key=”insert*”>PROPAGATION_REQUIRED,-MyCheckedExceptionprop> 
  11. <prop key=”update*”>PROPAGATION_REQUIREDprop> 
  12. <prop key=”*”>PROPAGATION_REQUIRED,readOnlyprop> 
  13. props> 
  14. property> 
  15. bean> 

事務(wù)代理會實(shí)現(xiàn)目標(biāo)對象的接口:這里是屬性名是target的引用。id是transactionServiceControl。(使用CGLIB也可以實(shí)現(xiàn)具體類的代理。只要設(shè)置proxyTargetClass屬性為true即可。如果目標(biāo)對象沒有實(shí)現(xiàn)任何接口,這將自動設(shè)置該屬性為true。通常,我們希望面向接口編程。)使用proxyInterfaces屬性來限定事務(wù)代理來代理指定接口也是可以。 也可以通過從org.springframework.aop.framework.ProxyConfig繼承或所有AOP代理工廠共享的屬性來定制 TransactionProxyFactoryBean行為。

然后,說說屬性名是transactionAttributes意義:
這里的transactionAttributes屬性是定義在 org.springframework.transaction.interceptor.NameMathTransactionAttributeSource 中的屬性格式設(shè)置。這個包括通配符的方法名稱映射是很直觀的,如”insert*”。注意insert*的映射的值包括回滾規(guī)則?!? MyCheckException”指定如果方法拋出MyCheckException或它的子類,事務(wù)會自動回滾。可以用逗號分隔多個回滾規(guī)則?!埃?前綴強(qiáng)制回滾,“+”前綴指定提交(這允許即使拋出unchecked異常時也可以提交事務(wù))?!癙ROPAGATION_REQUIRED”指定事務(wù)傳播范圍。

TransactionProxyFactoryBean允許你通過“preInterceptors”和 “postInterceptors”屬性設(shè)置前或后的攔截操作。可以設(shè)置任意數(shù)量的前和后通過,它們的類型可以是Advistor(切入點(diǎn)),MethodInterceptor或被當(dāng)前Spring配置支持的通知類型。例如:ThrowAdvice,AfterReturningAdvice或BeforeAdvice。這些通知必須支持實(shí)例共享模式。如果你需要高級 AOP特性操作事務(wù),通過org.springframework.aop.framework.ProxyFactoryBean,而不是 TransactionProxyFactory實(shí)用代理創(chuàng)建者。

2)另一種聲明方式:BeanNameAutoProxyCreator
使用TransactionProxyFactoryBean當(dāng)事務(wù)代理包裝對象,你可以完全控制代理。如果需要用一致方式包裝大量bean。使用一個 BeanFactoryPostProcessor的一個實(shí)現(xiàn),BeanNameAutoProxyCreator,可以提供另外一種方法。(Spring中,一旦ApplicationContext讀完它的初始化信息,它將初始化所有實(shí)現(xiàn)BeanPostProcessor接口的 bean,并且讓它們后處理ApplicationContext中所有其他的bean。所以使用這種機(jī)制,正確配置的 BeanNameAutoProxyCreator可以用來后處理所有ApplicationContext中所有其他的bean),并且把它們用事務(wù)代理包裝起來。真正生成的事務(wù)代理和使用TransactionProxyFactoryBean生成的基本一致。

最后,總結(jié)一下Spring的優(yōu)點(diǎn):
◆為不同的事務(wù)API提供一致的編程模型,如JTA、JDBC、Hibernate、iBATIS數(shù)據(jù)庫層JDO
◆提供比大多數(shù)事務(wù)API更簡單的、易于使用的編程式事務(wù)管理API
◆整合Spring數(shù)據(jù)訪問抽象
◆支持Spring聲明式事務(wù)管理

【編輯推薦】

  1. Spring中XML配置文件的十二個最佳方法(上)
  2. Spring中XML配置文件的十二個最佳方法(下)
  3. 簡化Spring配置文件
  4. 多種Spring.jar詳解
  5. Spring框架的事務(wù)管理應(yīng)用分析
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-06-30 16:57:42

Spring事務(wù)管理

2023-10-08 08:28:10

Spring事務(wù)管理

2023-03-27 10:40:09

2009-06-08 17:56:00

SpringJDBC事務(wù)

2014-08-25 09:12:47

Spring事務(wù)管理

2010-03-29 13:34:15

ibmdwSpring

2010-03-23 08:46:40

Spring

2009-09-25 12:59:53

Hibernate事務(wù)

2009-02-11 13:08:29

事務(wù)提交事務(wù)管理Spring

2009-02-11 11:14:31

事務(wù)管理事務(wù)開始Spring

2009-06-17 14:43:47

Spring框架Spring事務(wù)管理

2025-02-08 10:56:18

2009-06-03 10:20:11

Hibernate事務(wù)管理配置

2009-09-29 09:44:52

Hibernate事務(wù)

2009-09-23 17:48:00

Hibernate事務(wù)

2025-02-21 08:00:00

事務(wù)管理SpringBootJava

2023-05-06 07:29:49

Spring事務(wù)傳播

2022-08-04 08:46:16

單體架構(gòu)微服務(wù)事務(wù)管理

2025-02-18 13:00:00

SpringBoot事務(wù)管理代碼

2009-06-19 14:49:43

Spring框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號