`
dragonxiangfu
  • 浏览: 156404 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring的事务管理有几种方式实现,如何实现

 
阅读更多
Spring+Hibernate的实质:
就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理。

那么再没整合之前Hibernate是如何实现事务管理的呢?
通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。

一.事务的4个特性:
   原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。
   一致性:数据不会因为事务的执行而遭到破坏。
   隔离性:一个事务的执行,不受其他事务(进程)的干扰。既并发执行的个事务之间互不干扰。
   持久性:一个事务一旦提交,它对数据库的改变将是永久的。

二.事务的实现方式:
实现方式共有两种:编码方式;声明式事务管理方式。

基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。

声明式事务管理又有两种方式:基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。

三.创建事务的时机:

是否需要创建事务,是由事务传播行为控制的。读数据不需要或只为其指定只读事务,而数据的插入,修改,删除就需要事务管理了。

一种常见的事务管理配置:事务拦截器TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式

<!--定义Hibernate的事务管理器HibernateTransactionManager -->
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <!-- 依赖注入上面定义的sessionFactory -->
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

<!--定义Spring的事务拦截器TransactionInterceptor -->
    <bean id="transactionInterceptor"      class="org.springframework.transaction.interceptor.TransactionInterceptor">
	    <!--  依赖注入上面定义的事务管理器transactionManager -->
        <property name="transactionManager" ref="transactionManager"/>
      	<!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 -->    	
    	<property name="transactionAttributes">		    
		    <props>
			    <!-- 以browse、list、load、get及is开头的所有方法采用只读型事务控制类型 -->
			    <prop key="browse*">PROPAGATION_REQUIRED,readOnly</prop>
			    <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
			    <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
			    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
			    <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
			    <!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 -->
		    	<prop key="*">PROPAGATION_REQUIRED</prop>
		    </props>
	    </property>
	</bean>

<!-- 定义BeanNameAutoProxyCreatorf进行Spring的事务处理-->
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	    <!--  针对指定的bean自动生成业务代理 -->
	    <property name="beanNames"> 
            <list>
                <value>adminService</value>
                <value>columnsService</value>
                <value>newsService</value>
                <value>crawlService</value>
                <value>memberLevelService</value>
                <value>memberService</value>
                <value>categoryService</value>
                <value>merService</value>
                <value>cartService</value>
                <value>ordersService</value>
                <value>trafficService</value>
            </list>
	    </property>
	    <!--  这个属性为true时,表示被代理的是目标类本身而不是目标类的接口 -->
	    <property name="proxyTargetClass">
	    	<value>true</value>
	    </property>
       <!--  依赖注入上面定义的事务拦截器transactionInterceptor -->
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value> 
            </list>
        </property>
    </bean>	

尤其注意:如下
***********************************************************************************************************
【以上的事务拦截器和事务自动代理方式实现原理:像Struts2一样,都是凭借强大的拦截器功能对业务逻辑方法的调用进行拦截,然后又BeanNameAutoProxyCreator自动生成事务代理,最后送事务管理器,统一管理】
***********************************************************************************************************

Spring+Hibernate的实质:
就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理。

那么再没整合之前Hibernate是如何实现事务管理的呢?
通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。

一.事务的4个特性:
   原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。
   一致性:数据不会因为事务的执行而遭到破坏。
   隔离性:一个事务的执行,不受其他事务(进程)的干扰。既并发执行的个事务之间互不干扰。
   持久性:一个事务一旦提交,它对数据库的改变将是永久的。

二.事务的实现方式:
实现方式共有两种:编码方式;声明式事务管理方式。

基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。

声明式事务管理又有两种方式:基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。

三.创建事务的时机:

是否需要创建事务,是由事务传播行为控制的。读数据不需要或只为其指定只读事务,而数据的插入,修改,删除就需要事务管理了。

一种常见的事务管理配置:事务拦截器TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式

<!--定义Hibernate的事务管理器HibernateTransactionManager -->
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <!-- 依赖注入上面定义的sessionFactory -->
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

<!--定义Spring的事务拦截器TransactionInterceptor -->
    <bean id="transactionInterceptor"      class="org.springframework.transaction.interceptor.TransactionInterceptor">
	    <!--  依赖注入上面定义的事务管理器transactionManager -->
        <property name="transactionManager" ref="transactionManager"/>
      	<!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 -->    	
    	<property name="transactionAttributes">		    
		    <props>
			    <!-- 以browse、list、load、get及is开头的所有方法采用只读型事务控制类型 -->
			    <prop key="browse*">PROPAGATION_REQUIRED,readOnly</prop>
			    <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
			    <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
			    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
			    <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
			    <!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 -->
		    	<prop key="*">PROPAGATION_REQUIRED</prop>
		    </props>
	    </property>
	</bean>

<!-- 定义BeanNameAutoProxyCreatorf进行Spring的事务处理-->
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	    <!--  针对指定的bean自动生成业务代理 -->
	    <property name="beanNames"> 
            <list>
                <value>adminService</value>
                <value>columnsService</value>
                <value>newsService</value>
                <value>crawlService</value>
                <value>memberLevelService</value>
                <value>memberService</value>
                <value>categoryService</value>
                <value>merService</value>
                <value>cartService</value>
                <value>ordersService</value>
                <value>trafficService</value>
            </list>
	    </property>
	    <!--  这个属性为true时,表示被代理的是目标类本身而不是目标类的接口 -->
	    <property name="proxyTargetClass">
	    	<value>true</value>
	    </property>
       <!--  依赖注入上面定义的事务拦截器transactionInterceptor -->
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value> 
            </list>
        </property>
    </bean>	

尤其注意:如下
***********************************************************************************************************
【以上的事务拦截器和事务自动代理方式实现原理:像Struts2一样,都是凭借强大的拦截器功能对业务逻辑方法的调用进行拦截,然后又BeanNameAutoProxyCreator自动生成事务代理,最后送事务管理器,统一管理】
***********************************************************************************************************
分享到:
评论

相关推荐

    spring事务管理几种方式代码实例

    spring事务管理几种方式代码实例:涉及编程式事务,声明式事务之拦截器代理方式、AOP切面通知方式、AspectJ注解方式,通过不同方式实例代码展现,总结spring事务管理的一般规律,从宏观上加深理解spring事务管理特性...

    Spring事务管理的几种配置方式,

    自己写的Spring事务管理的几种配置方式的Demo。 供新手学习!

    spring事务几种传播方式

    本文介绍spring事务传播的几种方式

    Spring事务五种不同的代理配置

    Spring事务配置的五种方式 ,根据代理机制的不同,总结了五种Spring事务的配置方式.

    spring几种事务配置详解【精】

    spring几种事务配置,spring几种事务配置详解【精】

    Spring事务配置的五种方式

    对Spring的事务配置做了比较深入的研究,讲述了事务配置的几种方式和示例。

    Spring事务的传播特性和隔离级别

    Spring事务的传播特性和隔离级别 事务的几种传播特性详细介绍

    高级开发spring面试题和答案.pdf

    传播特性有几种?7种; 某一个事务嵌套另一个事务的时候怎么办? REQUIRED_NEW和REQUIRED区别 Spring的事务是如何回滚的,实现原理; 抽象类和接口的区别,什么时候用抽象类什么时候用接口; StringBuilder和...

    spring AOP(声明式事务管理)小程序

    用spring AOP(包括几种常用的通知类型)做的小程序

    分布式事务实践 解决数据一致性

    介绍分布式事务的定义、原则和实现原则,介绍使用Spring框架实现分布式事务的几种方式,包括使用JTA、Spring事务同步、链式事务等,并通过实战介绍其实现。除此以外还介绍了一些分布式事务相关的技术,如幂等性、...

    Spring开发指南

    依赖注入的几种实现类型 Type1 接口注入 Type2 设值注入 Type3 构造子注入 几种依赖注入模式的对比总结 Spring Bean封装机制 Bean Wrapper Bean Factory ApplicationContext Web Context Spring 高级...

    Spring面试题含答案.pdf

    49. Spring 框架的事务管理有哪些优点? 50. 你更倾向用那种事务管理类型? 51. 解释 AOP 52. Aspect 切面 53. 在 Spring AOP 中,关注点和横切关注的区别是什么? 54. 连接点 55. 通知 56. 切点 57. 什么是引入? ...

    java视频教程:spring框架精讲附加实战项目练习

    详细介绍了对象创建的细节和依赖注入的几种方式;介绍了如何使用注解完成Spring的相关功能;介绍了如何借助于Spring搭建JUnit测试环境;详细介绍了什么是AOP,以及AOP的基本示例;介绍了如何使用Spring中的JDBC模块...

    吴天雄--Spring笔记.doc

    IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性详解(包含单例设计模式),DI详解,Spring的几种注入方式,利用Spring简化Mybatis;第二天内容:AOP(AOP常用概念、Spring的三种aop实现方式、代理...

    SpringFramework常见知识点.md

    Spring常见知识点 - 什么是Spring Framework? - Spring的优缺点 - Spring的优点 ... - AOP实现方式有哪些? - AspectJ AOP 和 Spring AOP的区别? - cglib动态代理和jdk动态代理的区别? Spring常见知识

    spring面试题大全

    * 描述一下spring中实现DI(dependency injection)的几种方式(考察IOC) * 简单描述下IOC(inversion of control)的理解 * Spring对很多ORM框架提供了很好支持,描述下在spring使用hibernate的方法 请介绍下spring...

    spring事物的7大传播机制,5个隔离机制

    上文理解到对spring事物,事物的隔离机制,这片具体说下事物的传播机制和隔离机制

    千锋JavaEE精讲之Spring框架实战教程

    课程简介:  这门课程主要讲Spring的核心概念和基本使用。...详细介绍了对象创建的细节和依赖注入的几种方式;介绍了如何使用注解完成Spring的相关 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Spring基础与快速入门

    5 AOP:面向方面编程,我们可以把日志、安全、事务管理等服务(或功能)理解成一个“方面”,那么以前这些服务一直是直接写在业务逻辑的代码当中的,这有两点不好;首先业务逻辑不纯净,其次这些服务被很多业务逻辑...

Global site tag (gtag.js) - Google Analytics