日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring事务配置

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring事务配置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

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

??? 總結(jié)如下:

??? Spring配置文件中關(guān)于事務(wù)配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機(jī)制這三部分,無論哪種配置方式,一般變化的只是代理機(jī)制這部分。

??? DataSource、TransactionManager這兩部分只是會根據(jù)數(shù)據(jù)訪問方式有所變化,比如使用Hibernate進(jìn)行數(shù)據(jù)訪問時,DataSource實(shí)際為SessionFactory,TransactionManager的實(shí)現(xiàn)為HibernateTransactionManager。

??? 具體如下圖:

??? 根據(jù)代理機(jī)制的不同,總結(jié)了五種Spring事務(wù)的配置方式,配置文件如下:

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xmlns:context="http://www.springframework.org/schema/context"
??? xmlns:aop="http://www.springframework.org/schema/aop"
??? xsi:schemaLocation="http://www.springframework.org/schema/beans
?????????? http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
?????????? http://www.springframework.org/schema/context
?????????? http://www.springframework.org/schema/context/spring-context-2.5.xsd
?????????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

??? <bean id="sessionFactory"?
??????????? class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">?
??????? <property name="configLocation" value="classpath:hibernate.cfg.xml"?/>?
??????? <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"?/>
??? </bean>?

??? <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->?
??? <bean id="transactionManager"
??????? class="org.springframework.orm.hibernate3.HibernateTransactionManager">
??????? <property name="sessionFactory" ref="sessionFactory"?/>
??? </bean>
???
??? <!-- 配置DAO -->
??? <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
??????? <property name="sessionFactory" ref="sessionFactory"?/>
??? </bean>
???
??? <bean id="userDao"?
??????? class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">?
?????????? <!-- 配置事務(wù)管理器 -->?
?????????? <property name="transactionManager" ref="transactionManager"?/>????
??????? <property name="target" ref="userDaoTarget"?/>?
???????? <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao"?/>
??????? <!-- 配置事務(wù)屬性 -->?
??????? <property name="transactionAttributes">?
??????????? <props>?
??????????????? <prop key="*">PROPAGATION_REQUIRED</prop>
??????????? </props>?
??????? </property>?
??? </bean>?
</beans>

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xmlns:context="http://www.springframework.org/schema/context"
??? xmlns:aop="http://www.springframework.org/schema/aop"
??? xsi:schemaLocation="http://www.springframework.org/schema/beans
?????????? http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
?????????? http://www.springframework.org/schema/context
?????????? http://www.springframework.org/schema/context/spring-context-2.5.xsd
?????????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

??? <bean id="sessionFactory"?
??????????? class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">?
??????? <property name="configLocation" value="classpath:hibernate.cfg.xml"?/>?
??????? <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"?/>
??? </bean>?

??? <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->?
??? <bean id="transactionManager"
??????? class="org.springframework.orm.hibernate3.HibernateTransactionManager">
??????? <property name="sessionFactory" ref="sessionFactory"?/>
??? </bean>
???
??? <bean id="transactionBase"?
??????????? class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"?
??????????? lazy-init="true" abstract="true">?
??????? <!-- 配置事務(wù)管理器 -->?
??????? <property name="transactionManager" ref="transactionManager"?/>?
??????? <!-- 配置事務(wù)屬性 -->?
??????? <property name="transactionAttributes">?
??????????? <props>?
??????????????? <prop key="*">PROPAGATION_REQUIRED</prop>?
??????????? </props>?
??????? </property>?
??? </bean>???
??
??? <!-- 配置DAO -->
??? <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
??????? <property name="sessionFactory" ref="sessionFactory"?/>
??? </bean>
???
??? <bean id="userDao" parent="transactionBase"?>?
??????? <property name="target" ref="userDaoTarget"?/>??
??? </bean>
</beans>

第三種方式:使用攔截器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xmlns:context="http://www.springframework.org/schema/context"
??? xmlns:aop="http://www.springframework.org/schema/aop"
??? xsi:schemaLocation="http://www.springframework.org/schema/beans
?????????? http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
?????????? http://www.springframework.org/schema/context
?????????? http://www.springframework.org/schema/context/spring-context-2.5.xsd
?????????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

??? <bean id="sessionFactory"?
??????????? class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">?
??????? <property name="configLocation" value="classpath:hibernate.cfg.xml"?/>?
??????? <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"?/>
??? </bean>?

??? <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->?
??? <bean id="transactionManager"
??????? class="org.springframework.orm.hibernate3.HibernateTransactionManager">
??????? <property name="sessionFactory" ref="sessionFactory"?/>
??? </bean>?
??
??? <bean id="transactionInterceptor"?
??????? class="org.springframework.transaction.interceptor.TransactionInterceptor">?
??????? <property name="transactionManager" ref="transactionManager"?/>?
??????? <!-- 配置事務(wù)屬性 -->?
??????? <property name="transactionAttributes">?
??????????? <props>?
??????????????? <prop key="*">PROPAGATION_REQUIRED</prop>?
??????????? </props>?
??????? </property>?
??? </bean>
?????
??? <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">?
??????? <property name="beanNames">?
??????????? <list>?
??????????????? <value>*Dao</value>
??????????? </list>?
??????? </property>?
??????? <property name="interceptorNames">?
??????????? <list>?
??????????????? <value>transactionInterceptor</value>?
??????????? </list>?
??????? </property>?
??? </bean>?
?
??? <!-- 配置DAO -->
??? <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">
??????? <property name="sessionFactory" ref="sessionFactory"?/>
??? </bean>
</beans>

第四種方式:使用tx標(biāo)簽配置的攔截器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xmlns:context="http://www.springframework.org/schema/context"
??? xmlns:aop="http://www.springframework.org/schema/aop"
??? xmlns:tx="http://www.springframework.org/schema/tx"
??? xsi:schemaLocation="http://www.springframework.org/schema/beans
?????????? http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
?????????? http://www.springframework.org/schema/context
?????????? http://www.springframework.org/schema/context/spring-context-2.5.xsd
?????????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
?????????? http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

??? <context:annotation-config />
??? <context:component-scan base-package="com.bluesky"?/>

??? <bean id="sessionFactory"?
??????????? class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">?
??????? <property name="configLocation" value="classpath:hibernate.cfg.xml"?/>?
??????? <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"?/>
??? </bean>?

??? <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->?
??? <bean id="transactionManager"
??????? class="org.springframework.orm.hibernate3.HibernateTransactionManager">
??????? <property name="sessionFactory" ref="sessionFactory"?/>
??? </bean>

??? <tx:advice id="txAdvice" transaction-manager="transactionManager">
??????? <tx:attributes>
??????????? <tx:method name="*" propagation="REQUIRED"?/>
??????? </tx:attributes>
??? </tx:advice>
???
??? <aop:config>
??????? <aop:pointcut id="interceptorPointCuts"
??????????? expression="execution(* com.bluesky.spring.dao.*.*(..))"?/>
??????? <aop:advisor advice-ref="txAdvice"
??????????? pointcut-ref="interceptorPointCuts"?/>???????
??? </aop:config>?????
</beans>

第五種方式:全注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xmlns:context="http://www.springframework.org/schema/context"
??? xmlns:aop="http://www.springframework.org/schema/aop"
??? xmlns:tx="http://www.springframework.org/schema/tx"
??? xsi:schemaLocation="http://www.springframework.org/schema/beans
?????????? http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
?????????? http://www.springframework.org/schema/context
?????????? http://www.springframework.org/schema/context/spring-context-2.5.xsd
?????????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
?????????? http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

??? <context:annotation-config />
??? <context:component-scan base-package="com.bluesky"?/>

??? <tx:annotation-driven transaction-manager="transactionManager"/>

??? <bean id="sessionFactory"?
??????????? class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">?
??????? <property name="configLocation" value="classpath:hibernate.cfg.xml"?/>?
??????? <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"?/>
??? </bean>?

??? <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->?
??? <bean id="transactionManager"
??????? class="org.springframework.orm.hibernate3.HibernateTransactionManager">
??????? <property name="sessionFactory" ref="sessionFactory"?/>
??? </bean>
???
</beans>

此時在DAO上需加上@Transactional注解,如下:

package com.bluesky.spring.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;

import com.bluesky.spring.domain.User;

@Transactional
@Component("userDao")
public?class UserDaoImpl extends HibernateDaoSupport implements UserDao {

??? public List<User> listUsers() {
??????? return?this.getSession().createQuery("from User").list();
??? }
???
???
}

轉(zhuǎn)載于:https://my.oschina.net/u/1034537/blog/416296

總結(jié)

以上是生活随笔為你收集整理的spring事务配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。