首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring 事务配置的5种方法

2014-01-03 
spring 事务配置的五种方法根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:第一种方式:

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"4????xmlns:context="http://www.springframework.org/schema/context"5????xmlns:aop="http://www.springframework.org/schema/aop"6????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">7?8????<bean id="sessionFactory"9????????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">10????????<property name="configLocation" value="classpath:hibernate.cfg.xml" />11????????<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />12????</bean>? 13?14????<!-- 定义事务管理器(声明式的事务) -->15????<bean id="transactionManager"16????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">17????????<property name="sessionFactory" ref="sessionFactory" />18????</bean>19?20????<!-- 配置DAO -->21????<bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">22????????<property name="sessionFactory" ref="sessionFactory" />23????</bean>24?25????<bean id="userDao"26????????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<?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????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">7?8????<bean id="sessionFactory"9????????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">10????????<property name="configLocation" value="classpath:hibernate.cfg.xml" />11????????<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />12????</bean>? 13?14????<!-- 定义事务管理器(声明式的事务) -->15????<bean id="transactionManager"16????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">17????????<property name="sessionFactory" ref="sessionFactory" />18????</bean>19?20????<bean id="transactionBase"21????????????class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"22????????????lazy-init="true" abstract="true">23????????<!-- 配置事务管理器 -->24????????<property name="transactionManager" ref="transactionManager" />25????????<!-- 配置事务属性 -->26????????<property name="transactionAttributes">27????????????<props>28????????????????<prop key="*">PROPAGATION_REQUIRED</prop>29????????????</props>30????????</property>31????</bean>??? 32?33????<!-- 配置DAO -->34????<bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">35????????<property name="sessionFactory" ref="sessionFactory" />36????</bean>37?38????<bean id="userDao" parent="transactionBase" >39????????<property name="target" ref="userDaoTarget" />40????</bean>41</beans>

第三种方式:使用拦截器

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????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">7?8????<bean id="sessionFactory"9????????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">10????????<property name="configLocation" value="classpath:hibernate.cfg.xml" />11????????<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />12????</bean>? 13?14????<!-- 定义事务管理器(声明式的事务) -->15????<bean id="transactionManager"16????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">17????????<property name="sessionFactory" ref="sessionFactory" />18????</bean> 19?20????<bean id="transactionInterceptor"21????????class="org.springframework.transaction.interceptor.TransactionInterceptor">22????????<property name="transactionManager" ref="transactionManager" />23????????<!-- 配置事务属性 -->24????????<property name="transactionAttributes">25????????????<props>26????????????????<prop key="*">PROPAGATION_REQUIRED</prop>27????????????</props>28????????</property>29????</bean>30?31????<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">32????????<property name="beanNames">33????????????<list>34????????????????<value>*Dao</value>35????????????</list>36????????</property>37????????<property name="interceptorNames">38????????????<list>39????????????????<value>transactionInterceptor</value>40????????????</list>41????????</property>42????</bean>? 43?44????<!-- 配置DAO -->45????<bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">46????????<property name="sessionFactory" ref="sessionFactory" />47????</bean>48</beans>

第四种方式:使用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 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">8?9????<context:annotation-config />10????<context:component-scan base-package="com.bluesky" />11?12????<bean id="sessionFactory"13????????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">14????????<property name="configLocation" value="classpath:hibernate.cfg.xml" />15????????<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />16????</bean>? 17?18????<!-- 定义事务管理器(声明式的事务) -->19????<bean id="transactionManager"20????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">21????????<property name="sessionFactory" ref="sessionFactory" />22????</bean>23?24????<tx:advice id="txAdvice" transaction-manager="transactionManager">25????????<tx:attributes>26????????????<tx:method name="*" propagation="REQUIRED" />27????????</tx:attributes>28????</tx:advice>29?30????<aop:config>31????????<aop:pointcut id="interceptorPointCuts"32????????????expression="execution(* com.bluesky.spring.dao.*.*(..))" />33????????<aop:advisor advice-ref="txAdvice"34????????????pointcut-ref="interceptorPointCuts" />35????</aop:config>36</beans>

第五种方式:全注解

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 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">8?9????<context:annotation-config />10????<context:component-scan base-package="com.bluesky" />11?12????<tx:annotation-driven transaction-manager="transactionManager"/>13?14????<bean id="sessionFactory"15????????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">16????????<property name="configLocation" value="classpath:hibernate.cfg.xml" />17????????<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />18????</bean>? 19?20????<!-- 定义事务管理器(声明式的事务) -->21????<bean id="transactionManager"22????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">23????????<property name="sessionFactory" ref="sessionFactory" />24????</bean>25?26</beans>

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

1package com.bluesky.spring.dao;2?3import java.util.List;4?5import org.hibernate.SessionFactory;6import org.springframework.beans.factory.annotation.Autowired;7import org.springframework.orm.hibernate3.support.HibernateDaoSupport;8import org.springframework.stereotype.Component;9?10import com.bluesky.spring.domain.User;11?12@Transactional13@Component("userDao")14public class UserDaoImpl extends HibernateDaoSupport implements UserDao {15?16????public List<User> listUsers() {17????????return this.getSession().createQuery("from User").list();18????}19?20}

热点排行