zoukankan      html  css  js  c++  java
  • spring 声明式事务管理详解

    前言:spring框架对于事务管理提供了两种方案。一,编程式事务、二,声明式事务。本例主要剖析 声明式事务。

    何为声明式事务:

      通过spring的配置文件配置事务规则,或使用spring @Transactional注解两种方式通知我们系统中哪些方法需要引入事务支持。

    使用配置文件配置事务

    复制代码
     1 <!-- 使用spring声明式事务 -->
     2     <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
     3         <property name="sessionFactory" ref="mySessionFactory"></property>
     4     </bean>
     5     
     6     <tx:advice id="txAdvice" transaction-manager="transactionManager">
     7         <tx:attributes>
     8             <tx:method name="add*" propagation="REQUIRED" />
     9             <tx:method name="del*" propagation="REQUIRED" />
    10             <tx:method name="mod*" propagation="REQUIRED" />
    11             <tx:method name="*" propagation="REQUIRED" read-only="true" />
    12         </tx:attributes>
    13     </tx:advice>
    14 
    15     <aop:config>
    16         <aop:pointcut id="interceptorPointCuts"
    17             expression="execution(*   
    18         news.dao.*.*(..))" />
    19         <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
    20     </aop:config>
    复制代码

     解析:① 由于本例是给数据访问层的方法添加事务管理,因此我们需要配置一个org.springframework.orm.hibernate5.HibernateTransactionManager ,这个类的一个bean。

    ② tx:advice节点则是配置我们需要引入事务管理类的方法名,这里spring允许我们使用通配符(*)。

    ③ aop:config这个节点则是配置我们的工程中有哪些类以及哪些方法需要引入事务管理,同理依旧可以使用通配符。本例news.dao.*.*(..))这句的意义为:我们工程中news包下面的dao包下面的所有类以及所有方法都需要引入事务管理。

    使用spring注解实现事务管理

    复制代码
    1    @Override
    2     @Transactional(readOnly=true)
    3     public List showAllNews() {
    4         List<News> allNewList = nd.showAllNews();
    5         //在return 之间,可以进行各种业务逻辑操作,本例省略
    6         
    7         return allNewList;
    8     }
    复制代码

    解析:以上代码段是截取自业务层某一个方法的片段,在这里我们只需要加入@Transactional这一个spring的注解就是这么简单就可以实现事务管理了,同时我们配置文件中也无需配置tx:advice和aop:config这两个比较麻烦的节点了。

    总结:两种方式都可以实现事务管理,使用注解一步到位,为什么我们还要学一个这么复杂的xml文件配置来实现事务管理呢。博主在当时学习的时候同样有这样的疑问。在这里我简单解析一下这两者如何取舍。一,xml文件配置可以实现使我们的代码简化,并一定程度上与代码解耦,一旦我们的工程需要替换框架,只需改动配置,而无需改动源码。二,使用注解可以非常直观的理解我们的源码,提高了可读性,不过只建议在一个相对较小,框架固定的工程中使用。具体该使用哪种方式还得依据具体情况分析。

  • 相关阅读:
    jqgrid 重新加载,表头错乱问题
    TortoiseSVN 安装时出现 please install the universal crt
    随意下载:afinal jar
    Android com.daimajia.slider.library.SliderLayout 去掉底部半透明标题背景
    MUI ios下用video标签默认全屏播放
    ARouter学习随笔
    [总]Android高级进阶之路
    Android冷启动优化
    Dagger2源码浅析
    Fragment与Activity的生命周期对比
  • 原文地址:https://www.cnblogs.com/zhangyingai/p/7098948.html
Copyright © 2011-2022 走看看