我的日常

登录/注册
您现在的位置:论坛 资料库 JAVA开发 > Spring事务配置的五种方式
总共48087条微博

动态微博

查看: 1400|回复: 0

Spring事务配置的五种方式

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2016-06-08 15:42:17 |只看该作者 |倒序浏览
    spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。

        DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。

        具体如下图:



    根据代理机制的不同,总结了五种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
    7.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    8.            http://www.springframework.org/schema/context
    9.            http://www.springframework.org/schema/context/spring-context-2.5.xsd
    10.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

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

    16.     <!-- 定义事务管理器(声明式的事务) -->  
    17.     <bean id="transactionManager"
    18.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    19.         <property name="sessionFactory" ref="sessionFactory" />
    20.     </bean>
    21.    
    22.     <!-- 配置DAO -->
    23.     <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
    24.         <property name="sessionFactory" ref="sessionFactory" />
    25.     </bean>
    26.    
    27.     <bean id="userDao"  
    28.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
    29.            <!-- 配置事务管理器 -->  
    30.            <property name="transactionManager" ref="transactionManager" />     
    31.         <property name="target" ref="userDaoTarget" />  
    32.          <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />
    33.         <!-- 配置事务属性 -->  
    34.         <property name="transactionAttributes">  
    35.             <props>  
    36.                 <prop key="*">PROPAGATION_REQUIRED</prop>
    37.             </props>  
    38.         </property>  
    39.     </bean>  
    40. </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
    7.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    8.            http://www.springframework.org/schema/context
    9.            http://www.springframework.org/schema/context/spring-context-2.5.xsd
    10.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

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

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

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

    16.     <!-- 定义事务管理器(声明式的事务) -->  
    17.     <bean id="transactionManager"
    18.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    19.         <property name="sessionFactory" ref="sessionFactory" />
    20.     </bean>
    21.    
    22.     <bean id="transactionInterceptor"  
    23.         class="org.springframework.transaction.interceptor.TransactionInterceptor">  
    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.     <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
    34.         <property name="beanNames">  
    35.             <list>  
    36.                 <value>*Dao</value>
    37.             </list>  
    38.         </property>  
    39.         <property name="interceptorNames">  
    40.             <list>  
    41.                 <value>transactionInterceptor</value>  
    42.             </list>  
    43.         </property>  
    44.     </bean>  
    45.   
    46.     <!-- 配置DAO -->
    47.     <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">
    48.         <property name="sessionFactory" ref="sessionFactory" />
    49.     </bean>
    50. </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
    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.     <bean id="sessionFactory"  
    16.             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.     <bean id="transactionManager"
    22.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    23.         <property name="sessionFactory" ref="sessionFactory" />
    24.     </bean>

    25.     <tx:advice id="txAdvice" transaction-manager="transactionManager">
    26.         <tx:attributes>
    27.             <tx:method name="*" propagation="REQUIRED" />
    28.         </tx:attributes>
    29.     </tx:advice>
    30.    
    31.     <aop:config>
    32.         <aop:pointcut id="interceptorPointCuts"
    33.             expression="execution(* com.bluesky.spring.dao.*.*(..))" />
    34.         <aop:advisor advice-ref="txAdvice"
    35.             pointcut-ref="interceptorPointCuts" />        
    36.     </aop:config>      
    37. </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
    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.     <tx:annotation-driven transaction-manager="transactionManager"/>

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

    21.     <!-- 定义事务管理器(声明式的事务) -->  
    22.     <bean id="transactionManager"
    23.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    24.         <property name="sessionFactory" ref="sessionFactory" />
    25.     </bean>
    26.    
    27. </beans>
    复制代码



    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    红红火火恍恍惚惚
    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表