1. 程式人生 > >Spring宣告式事務管理與配置介紹

Spring宣告式事務管理與配置介紹

一、Spring宣告式事務配置的五種方式

前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發覺Spring的事務配置只要把思路理清,還是比較好掌握的。

總結如下:

Spring配置檔案中關於事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。

DataSource、TransactionManager這兩部分只是會根據資料訪問方式有所變化,比如使用Hibernate進行資料訪問時,DataSource實際為SessionFactory,TransactionManager的實現為HibernateTransactionManager。

具體如下圖:

Spring宣告式事務配置

根據代理機制的不同,總結了五種Spring事務的配置方式,配置檔案如下:

第一種方式:每個Bean都有一個代理

1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
4 xmlns:aop="http://www.springframework.org/schema/aop"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
7 http://www.springframework.org/schema/context
8 http://www.springframework.org/schema/context/spring-context-2.5.xsd
9 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
10
11 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
12 <property name="configLocation" value="classpath:hibernate.cfg.xml" />
13 <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
14 </bean>
15
16 <!-- 定義事務管理器(宣告式的事務) -->
17 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
18 <property name="sessionFactory" ref="sessionFactory" />
19 </bean>
20
21 <!-- 配置DAO -->
22 <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
23 <property name="sessionFactory" ref="sessionFactory" />
24 </bean>
25
26 <bean id="userDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
27 <!-- 配置事務管理器 -->
28 <property name="transactionManager" ref="transactionManager" />
29 <property name="target" ref="userDaoTarget" />
30 <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />
31 <!-- 配置事務屬性 -->
32 <property name="transactionAttributes">
33 <props>
34 <prop key="*">PROPAGATION_REQUIRED</prop>
35 </props>
36 </property>
37 </bean>
38 </beans>

第二種方式:所有Bean共享一個代理基類

1 ......
2 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
3 <property name="configLocation" value="classpath:hibernate.cfg.xml" />
4 <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
5 </bean>
6
7 <!-- 定義事務管理器(宣告式的事務) -->
8 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
9 <property name="sessionFactory" ref="sessionFactory" />
10 </bean>
11
12 <bean id="transactionBase" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true">
13 <!-- 配置事務管理器 -->
14 <property name="transactionManager" ref="transactionManager" />
15 <!-- 配置事務屬性 -->
16 <property name="transactionAttributes">
17 <props>
18 <prop key="*">PROPAGATION_REQUIRED</prop>
19 </props>
20 </property>
21 </bean>
22
23 <!-- 配置DAO -->
24 <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
25 <property name="sessionFactory" ref="sessionFactory" />
26 </bean>
27
28 <bean id="userDao" parent="transactionBase">
29 <property name="target" ref="userDaoTarget" />
30 </bean>

第三種方式:使用攔截器

1 ......
2 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
3 <property name="configLocation" value="classpath:hibernate.cfg.xml" />
4 <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
5 </bean>
6
7 <!-- 定義事務管理器(宣告式的事務) -->
8 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
9 <property name="sessionFactory" ref="sessionFactory" />
10 </bean>
11
12 <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
13 <property name="transactionManager" ref="transactionManager" />
14 <!-- 配置事務屬性 -->
15 <property name="transactionAttributes">
16 <props>
17 <prop key="*">PROPAGATION_REQUIRED</prop>
18 </props>
19 </property>
20 </bean>
21
22 <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
23 <property name="beanNames">
24 <list>
25 <value>*Dao</value>
26 </list>
27 </property>
28 <property name="interceptorNames">
29 <list>
30 <value>transactionInterceptor</value>
31 </list>
32 </property>
33 </bean>
34
35 <!-- 配置DAO -->
36 <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">
37 <property name="sessionFactory" ref="sessionFactory" />
38 </bean>

第四種方式:使用tx標籤配置的攔截器

1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:aop="http://www.springframework.org/schema/aop"
6 xmlns:tx="http://www.springframework.org/schema/tx"
7 xsi:schemaLocation="http://www.springframework.org/schema/beans
8 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
9 http://www.springframework.org/schema/context
10 http://www.springframework.org/schema/context/spring-context-2.5.xsd
11 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
12 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
13 <context:annotation-config />
14 <context:component-scan base-package="com.bluesky" />
15
16 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
17 <property name="configLocation" value="classpath:hibernate.cfg.xml" />
18 <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
19 </bean>
20
21 <!-- 定義事務管理器(宣告式的事務) -->
22 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
23 <property name="sessionFactory" ref="sessionFactory" />
24 </bean>
25
26 <tx:advice id="txAdvice" transaction-manager="transactionManager">
27 <tx:attributes>
28 <tx:method name="*" propagation="REQUIRED" />
29 </tx:attributes>
30

相關推薦

Spring宣告事務管理配置介紹

一、Spring宣告式事務配置的五種方式 前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發覺Spring的事務配置只要把思路理清,還是比較好掌握的。 總結如下: Sprin

spring宣告事務管理方式( 基於tx和aop名字空間的xml配置[email&#

轉自:https://www.cnblogs.com/niceyoo/p/8732891.html 1. 宣告式事務管理分類 宣告式事務管理也有兩種常用的方式, 一種是基於tx和aop名字空間的xml配置檔案,另一種就是基於@Transactional註解。 顯然基於註解的方式更簡單

Spring宣告事務管理事務的傳播行為xml配置

 1. <tx:method name="insert*" propagation="REQUIRED" />中name的值是ServiceImpl中各個要加入事物管理的方法的方法名。 <!-- 事務管理: Spring宣告式事務管理 。

事務管理spring基於註解的宣告事務管理配置和用法

因為前幾天看一個專案文件出現“本系統採用基於Spring的宣告式事務控制”,才根據文件和程式碼瞭解了一下事務管理的相關知識。這裡對自己的學習做個總結。 一:相關概念 1.事務:事務是一系列的動作,它們

第十二講:12,spring宣告事務管理-註解

1,複製專案spring404 ,改名spring404-3。修改BankServiceImpl類,添加註解,package com.cruise.service.impl;import org.springframework.transaction.annotation.Tra

第十一講:11.spring宣告事務管理-xml方式

1,複製專案spring404 ,改名spring404-2,修改BankServiceImpl類,刪除宣告式事務的程式碼。宣告式事務管理的方式缺點是,事務程式碼嚴重嵌入邏輯程式碼中 package com.cruise.service.impl; import org.springframewor

spring宣告事務管理:基於註解的方式

1)在spring.xml中配置事務管理器DataSourceTransactionManager,<bean id="txManager" class="org.springframework.

Spring宣告事務管理事務巢狀

一>  事務配置 Spring動態代理的一個重要特徵是,它是針對介面的,所以我們的dao要通過動態代理來讓spring接管事務,就必須在dao前面抽象出一個介面,當然如果沒有這樣的介面,那麼spring會使用CGLIB來解決問題。     一般地,使用Spri

Spring宣告事務管理原始碼解析

核心介面 1. PlatformTransactionManager:事務管理器頂級介面:各持久化框架要想接入Spring的事務管理,必須自行提供該介面實現 2. TransactionDefinition:事務的屬性頂級介面:其實現類封裝事務隔離級別、

淺談Spring宣告事務管理ThreadLocal和JDKProxy

寫這篇文章的目的,為了使大家更好的理解和摸清事務的規律,希望對新手學習事務這塊內容時有所幫助。    在我們開發一個應用時,很多時候我們的一個業務操作會對資料庫進行多次操作,有時候我們需要保證這麼一系列的操作要麼全部成功,要麼全部失敗,其實這個這個概念就是我們今天要談論的事務。       現在我們開發應用

spring 宣告事務管理註解方式實現

使用註解實現Spring的宣告式事務管理,更加簡單! 步驟:          1) 必須引入Aop相關的jar檔案          2) bean.xml中指定註解方式實現宣告式事務管理以及應用的事務管理器類          3)在需要新增事務控制的地方,寫上: @T

spring事物配置宣告事務管理和基於@Transactional註解的使用

spring支援程式設計式事務管理和宣告式事務管理兩種方式。         程式設計式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於程式設計式事務管理,spring推薦使用Transactio

spring事務管理之三:宣告事務管理:使用xml配置檔案的方式

這種方式是開發中常見的一種方式:利用aop的思想,將需要事務管理的業務方法通過xml配置的方式,將事務管理加在該類的相關方法上。這種方法的優點是,一次xml配置,後期不用關心業務類增加或者減少,通過xml中配置的匹配資訊,會去找業務類所在的包和方法,然後加上事務。 重點是配置<tx:a

spring事物管理宣告事務管理的xml配置

spring宣告式事務管理:xml配置如下 <!--  ================== 事務管理 ================== -->     <bean name="transactionManager"         class="or

Spring不同事務管理方式宣告事務管理區域性回滾處理方案

Spring配置檔案中關於事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。  DataSource、TransactionManager這兩部分只是會根據資料訪問

宣告事務管理三:基於註解的配置

這種基於註解配置的宣告式事務管理方法式很簡單,很方便              (1) 像之前一樣恢復到初始狀態 (2) 配置事務管理器(注入連線池)       (3) 開啟註解

宣告事務管理二:基於AspectJ的xml配置

下面講述的是宣告式事務管理的第二種方法,是基於AspectJ的xml配置的       (1) 引入AspectJ的java包(一種簡化的操作)並copy到web-INF       (2) 配置事務管理器   &n

Java程式設計師從笨鳥到菜鳥之(八十)細談Spring(九)spring+hibernate宣告事務管理詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

淺談spring事務管理的2種方式:程式設計事務管理宣告事務管理;以及@Transactional(rollbackFor=Exception.class)註解用法

事務的概念,以及特性: 百度百科介紹: ->資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過

使用註解實現Spring宣告事務管理

使用註解實現Spring的宣告式事務管理,更加簡單! 步驟:          1) 必須引入Aop相關的jar檔案          2) b