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

    前沿:通过对spring事务管理有了比较深入学习,本文将不做实例,而是指定具体的类和配置文件进行讲解。

    本文内容:

      1、了解什么是声明式事务?

      2、声明式事务管理分别有哪几种?

      3、这几种事务管理之间的区别是什么?

    一、什么是声明式事务?

      声明式事务(declarative transaction management)是spring提供的对程序事务管理的方式之一。Spring的声明式事务就是采用声明的方式来处理事务,用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要更改事务管理,也只需要在定义的配置文件中修改配置即可,在不需要事务管理的时候,只要在配置文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便。

     
    二、声明式事务管理方式。
      首先在还没说声明式事务管理方式之前先看看原始的事务管理,

      由上图可以看出,首先我们需要建立一个新的session.openSession(),其次通过session的getTransaction().begin()方法和getTransaction().commit()方法进行事务创建和事务提交,并且需要关闭session.close(),这样一来我们每次调用这个方法都会重新创建一个新的session,都要反复的做一样的事情,这样就不符合我们的软件工程设计思想,接下来我们使用声明式事务管理方式进行对代码的简化和调整。

      1、使用springAOP声明式事务管理。

       1.1、我们需要导入aop的几个包:

      

       1.2、然后在application.xml配置文件中进行事务配置: 

       1.3、将查询所有数据那个方法进行修改:

      经过上面讲解,我们可以看得出对showAllNews()方法的修改,首先我们将原来的openSession()方法改为了getCurrentSession()方法(注:截图有注释说明他们的区别,我就不再重复),并且不需要再手动去创建事务和提交事务,我们的springAOP会自动对事务进行管理、自动的关闭session。

     

      2、使用@Transactional注解方式。

        2.1、首先我们需要在application.xml配置文件中进行事务配置(通知Spring容器对注解@Transactional的Bean处理):

       2.2、然后在NewsDaoImpl中不需要做任何的操作和修改:

        2.3、给NewsServiceImpl添加注解。

      在这里我们@Transactional注解可以添加到类上(表示所有的方法都加入事务管理),也可以在具体的方法加上注解 @Transactional,如果是不用对数据进行修改的方法要添加一个属性。

        比如:查询所有数据的方法 @Transactional(readOnly=true) 

      

      3、使用SpringAOP配置的声明式事务管理跟@Transactional注解的区别:

       1)SpringAOP配置声明式事务管理耦合性低,可读性低,表达较详细,灵活性也高。

       2)@Transactional注解可读性较高,内容分散不利于统一的管理和维护,耦合性较高。

      

  • 相关阅读:
    std::sort运行出core(segment fault)
    C++编译报错:重复定义
    《改变世界的九大算法》读书笔记
    简单排序实现
    Django 常见错误总结
    python 进行机器学习
    python中matplotlib 的简单使用
    十四:生成器函数和迭代器函数
    十三:装饰器函数
    十二:重要的内置函数
  • 原文地址:https://www.cnblogs.com/laibin/p/5993596.html
Copyright © 2011-2022 走看看