javascript
Spring配置文件详解三:Spring声明式事务管理
1.聲明式事務管理
| ?Spring提供了聲明式事務管理,這是通過Spring AOP實現的。 原理:Spring中進行事務管理的通常方式是利用AOP(面向切片編程)的方式,為普通java類封裝事務控制,它是通過動態代理實現的,由于接口 是延遲實例化的,spring在這段時間內通過攔截器,加載事務切片。 |
2.Spring用BeanNameAutoProxyCreator自動創建事務代理
| ????? 采用這種配置策略,完全可以避免增量式配置,所有的事務代理由系統自動創建。容器中的目標bean自動消失,避免需要使用嵌套bean來保證 目標bean不可被訪問。這種配置方式依賴于Spring提供的bean后處理器,該后處理器用于為每個bean自動創建代理,此處的代理不僅可以是事務代 理,也可以是任意的代理,只需要有合適的攔截器即可。下面是這種代理在Spring配置文件中的配置方式: <!-- 定義事務管理器 開啟Spring事務處理 --> <!-- 定義事務傳播屬性 --> <bean id= "nameMatch"class= "org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource"> ???????????????<propkey="insert*">PROPAGATION_REQUIRED</prop> ????????? </props> <!--?配置事務攔截器 --> ??????????<!--?? 事務攔截器bean需要依賴注入一個事務管理器 --> ?????????? <!--?? 下面定義事務傳播屬性--> <bean id= "autoProxyCreator" class= "org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" > ?????????? <!--指定對滿足哪些bean name的bean自動生成業務代理 --> ??????????????????? <!--?? 此處可增加其他需要自動創建事務代理的bean--> ??????????? <!--?? 下面定義BeanNameAutoProxyCreator所需的事務攔截器--> ????????????????????? <!-- 此處可增加其他新的Interceptor --> ????? TranscationInterceptor是一個事務攔截器bean,需要傳入一個TransactionManager的引用。配置中使用 Spring依賴注入該屬性, 事務攔截器的事務屬性通過transactionAttributes來指定,該屬性有props子元素,配置文件中定義了 三個事務傳播規則:所有以insert開始的方法, 采用PROPAGATION_REQUIRED的事務傳播規則。程序拋出 MyException異常及其子異常時,自動回滾事務。 所有以find開頭的方法,采用PROPAGATION_REQUIRED事務傳播規則,并且只 讀。其他方法,則采用PROPAGATION_REQUIRED的事務傳播 規則。BeanNameAutoProxyCreator是個根據 bean名生成自動代理的代理創建器,該bean通常需要接受兩個參數。第一個是beanNames屬性,該 屬性用來設置哪些bean需要自動生成代理。 另一個屬性是interceptorNames,該屬性則指定事務攔截器,自動創建事務代理時,系統會根據這些事 務攔截器的屬性來生成對應的事務代理。 |
3.Spring事務管理配置屬性
| ?1.傳播行為(Propagation behavior): ?????? PROPAGATION_MANDATORY:方法必須在一個現存的事務中進行,否則丟出異常 2.隔離層級(Isolation level): ?????? 在一個應用程序中,可能有多個事務在同時進行,這些事務應當彼此之間互不知道另一個事務的存在,比如現在整個應用程序就只有一個事務 存在,由于事務彼此之間獨立,若讀取的是同一個數據的話,就容易發生問題,比如: 讀取的數據則是錯誤的。 鎖后才能 進行。然而,根據需求的不同,并不用在事務進行時完全的鎖定數據,隔離層級可以讓您根據實際的需求,對數據的鎖定進行設置。一下 是幾個隔離層級的參數說 明: ????? 事實上,對于事務的傳播特性,可以設置對應的隔離層級。在Spring中,我們用的最多的就是PROPAGATIOIN_REQUIRED這種傳 播行為。這 個意思是,如果應用程序中已經存在一個事務了,當另一個事務進來時,會加入到這個事務中,如果沒有事務存在,則開啟一個新的事務。 |
總結
以上是生活随笔為你收集整理的Spring配置文件详解三:Spring声明式事务管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring4声明式事务--01注解方式
- 下一篇: Struts2中 Result类型配置详