详解Spring事务Transaction设置的五种注入方法
当前位置:以往代写 > JAVA 教程 >详解Spring事务Transaction设置的五种注入方法
2019-06-14

详解Spring事务Transaction设置的五种注入方法

详解Spring事务Transaction设置的五种注入方法

副标题#e#

前段时间对Spring的事务设置做了较量深入的研究,在此之间对Spring的事务设置虽说也设置过,可是一直没有一个清楚的认识。通过这次的进修觉察Spring的事务设置只要把思路理清,照旧较量好把握的。

总结如下:

Spring设置文件中关于事务设置老是由三个构成部门,别离是DataSource、TransactionManager和署理机制这三部门,无论哪种设置方法,一般变革的只是署理机制这部门。

DataSource、TransactionManager这两部门只是会按照数据会见方法有所变革,好比利用Hibernate举办数据会见时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。

详细如下图:

详解Spring事务Transaction配置的五种注入要领

按照署理机制的差异,总结了五种Spring事务的设置方法,设置文件如下:

第一种方法:每个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>   
      
 <!-- 界说事务打点器(声明式的事务) -->   
 <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">   
 <!-- 设置事务打点器 -->   
 <property name="transactionManager" ref="transactionManager"  />   
 <property name="target" ref="userDaoTarget"  />   
 <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao"  />   
 <!-- 设置事务属性 -->   
 <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>   
      
 <!-- 界说事务打点器(声明式的事务) -->   
 <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">   
 <!-- 设置事务打点器 -->   
 <property name="transactionManager" ref="transactionManager"  />   
 <!-- 设置事务属性 -->   
 <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>

第三种方法:利用拦截器

#p#分页标题#e#


#p#副标题#e#
<?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>   
      
 <!-- 界说事务打点器(声明式的事务) -->   
 <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"  />   
 <!-- 设置事务属性 -->   
 <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标签设置的拦截器

<?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>   
      
 <!-- 界说事务打点器(声明式的事务) -->   
 <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>

第五种方法:全注解

    关键字:

在线提交作业