欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring声明式事务管理解析

程序员文章站 2024-03-12 19:36:14
前沿:通过对spring事务管理有了比较深入学习,本文将不做实例,而是指定具体的类和配置文件进行讲解。 本文内容:   1、了解什么是声明式事务?   2、声明式事务...

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

本文内容:

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

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

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

一、什么是声明式事务?

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

二、声明式事务管理方式。  

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

spring声明式事务管理解析

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

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

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

  spring声明式事务管理解析

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

spring声明式事务管理解析

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

spring声明式事务管理解析

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

2、使用@transactional注解方式。

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

spring声明式事务管理解析

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

spring声明式事务管理解析

2.3、给newsserviceimpl添加注解。

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

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

 spring声明式事务管理解析

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。