1. Spring+Hibernate的实质:
    就是把Hibernate用到的数据源DatasourceHibernateSessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理。
  2.  
  3. 那么再没整合之前Hibernate是如何实现事务管理的呢?
    通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。
  4.  
  5. 一.事务的4个特性:
    原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。
    一致性:数据不会因为事务的执行而遭到破坏。
    隔离性:一个事务的执行,不受其他事务(进程)的干扰。既并发执行的个事务之间互不干扰。
    持久性:一个事务一旦提交,它对数据库的改变将是永久的。
  6.  
  7. 二.事务的实现方式:
    实现方式共有两种:编码方式;声明式事务管理方式。
  8.  
  9. 基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。
  10.  
  11. 声明式事务管理又有两种方式:基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。
  12.  
  13. 三.创建事务的时机:
  14.  
  15. 是否需要创建事务,是由事务传播行为控制的。读数据不需要或只为其指定只读事务,而数据的插入,修改,删除就需要事务管理了。
  16.  
  17. 一种常见的事务管理配置:事务拦截器TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式
  18.  
  19. <!--定义Hibernate的事务管理器HibernateTransactionManager -->
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <!-- 依赖注入上面定义的sessionFactory -->
    <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
  20.  
  21. <!--定义Spring的事务拦截器TransactionInterceptor -->
    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <!-- 依赖注入上面定义的事务管理器transactionManager -->
    <property name="transactionManager" ref="transactionManager"/>
    <!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 -->
    <property name="transactionAttributes">
    <props>
    <!-- browselistloadgetis开头的所有方法采用只读型事务控制类型 -->
    <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>
  22.  
  23. <!-- 定义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>
  24.  
  25. 尤其注意:如下
    ***********************************************************************************************************
    【以上的事务拦截器和事务自动代理方式实现原理:像Struts2一样,都是凭借强大的拦截器功能对业务逻辑方法的调用进行拦截,然后又BeanNameAutoProxyCreator自动生成事务代理,最后送事务管理器,统一管理】
    ***********************************************************************************************************
  26.  
  27. Spring+Hibernate的实质:
    就是把Hibernate用到的数据源DatasourceHibernateSessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理。
  28.  
  29. 那么再没整合之前Hibernate是如何实现事务管理的呢?
    通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。
  30.  
  31. 一.事务的4个特性:
    原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。
    一致性:数据不会因为事务的执行而遭到破坏。
    隔离性:一个事务的执行,不受其他事务(进程)的干扰。既并发执行的个事务之间互不干扰。
    持久性:一个事务一旦提交,它对数据库的改变将是永久的。
  32.  
  33. 二.事务的实现方式:
    实现方式共有两种:编码方式;声明式事务管理方式。
  34.  
  35. 基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。
  36.  
  37. 声明式事务管理又有两种方式:基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。
  38.  
  39. 三.创建事务的时机:
  40.  
  41. 是否需要创建事务,是由事务传播行为控制的。读数据不需要或只为其指定只读事务,而数据的插入,修改,删除就需要事务管理了。
  42.  
  43. 一种常见的事务管理配置:事务拦截器TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式
  44.  
  45. <!--定义Hibernate的事务管理器HibernateTransactionManager -->
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <!-- 依赖注入上面定义的sessionFactory -->
    <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
  46.  
  47. <!--定义Spring的事务拦截器TransactionInterceptor -->
    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <!-- 依赖注入上面定义的事务管理器transactionManager -->
    <property name="transactionManager" ref="transactionManager"/>
    <!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 -->
    <property name="transactionAttributes">
    <props>
    <!-- browselistloadgetis开头的所有方法采用只读型事务控制类型 -->
    <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>
  48.  
  49. <!-- 定义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>
  50.  
  51. 尤其注意:如下
    ***********************************************************************************************************
    【以上的事务拦截器和事务自动代理方式实现原理:像Struts2一样,都是凭借强大的拦截器功能对业务逻辑方法的调用进行拦截,然后又BeanNameAutoProxyCreator自动生成事务代理,最后送事务管理器,统一管理】

Spring 拦截器实现事物的更多相关文章

  1. Spring拦截器中通过request获取到该请求对应Controller中的method对象

    背景:项目使用Spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置.我的需求是想在自定义的Spring拦截器中通过request获取到该请求对应于Control ...

  2. spring拦截器中修改响应消息头

    问题描述 前后端分离的项目,前端使用Vue,后端使用Spring MVC. 显然,需要解决浏览器跨域访问数据限制的问题,在此使用CROS协议解决. 由于该项目我在中期加入的,主要负责集成shiro框架 ...

  3. Spring 拦截器实现+后台原理(HandlerInterceptor)

    过滤器跟拦截器的区别 spring mvc的拦截器是只拦截controller而不拦截jsp,html 页面文件的.这就用到过滤器filter了,filter是在servlet前执行的,你也可以理解成 ...

  4. Spring拦截器和过滤器

    什么是拦截器 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略.它通过动态拦截Action调用的对象,允许开发者 ...

  5. Spring 拦截器——HandlerInterceptor

    采用Spring拦截器的方式进行业务处理.HandlerInterceptor拦截器常见的用途有: 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2 ...

  6. spring 拦截器简介

    spring 拦截器简介 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等.2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直 ...

  7. Spring 拦截器配置

    Spring interceptor拦截器配置 Spring mvc的拦截器是通过handlerinterceptor来实现的 实现方式: 1.自定义一个类实现Spring的handlerinterc ...

  8. spring拦截器的定义

    (一).拦截器的定义 1.为什么需要拦截器:在做身份认证或者是进行日志的记录时,我们需要通过拦截器达到我们的目的 2.什么事拦截器:在AOP(Aspect-Oriented Programming)中 ...

  9. Spring拦截器总结

    本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看 Spring过滤器WebFilter可以配置中文过滤 拦截器实现步骤 ...

随机推荐

  1. javascript操作JSON对象,增加 删除 修改

    JS只能输入数字,数字和字母等的正则表达式 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace( ...

  2. 提交服务器 post get

    HttpRequest Post or Get // method --- WebRequestMethods.Http.Post 或 WebRequestMethods.Http.Get priva ...

  3. Oracle中如何判断字符串是否全为数字,以及从任意字符串中提取数字

    本文介绍了判断字符串是否全为数字的4种办法,另外还介绍了一个translate函数的小技巧,从任意字符串中提取数字(调用2次translate函数).这个办法是一个公司同事发现的,用起来很方便,但理解 ...

  4. 如何在一个工作站里创建多个工程(同一个xcode下面创建多个工程)

    第一步,理解: 怎么会有一个xcode下面创建两个工程这一说呢,一个工程代表一个项目,意思就是有两个项目了.错.其实在一个窗口下面并不是两个工程,而是一个workspace 即一个工作站.在工作站里面 ...

  5. 将单链表的每K个节点之间逆序

    [说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“将单链表的每K个节点之间逆序”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明, ...

  6. Java中的流程控制(三)

    关于Java中的流程控制 关于Java中的流程控制 4.do while语句 do while语句的功能和while语句差不多,只不过它是在执行完第一次循环后才检测条件表达式的值,这意味着包含在大括号 ...

  7. 【转】从框架看PHP的五种境界及各自的薪资待遇

    无意中看到这篇文章,有些触动,作为博客开篇,用来激励自己. 原文地址:点击打开 在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文 ...

  8. hdu 3572 Escape 网络流

    题目链接 给一个n*m的图, 里面有一些点, '.'代表空地, '#'代表墙, 不可以走, '@'代表大门, 可以有多个, 'X'代表人, 问所有人都走出大门需要的最短时间, 每一时刻一个格子只能有一 ...

  9. while 、do...while 、for

    1.while 特点:只有条件成立才会执行循环体. while陷阱: while(条件);即直接加分号 2.do while 特点:一定会执行一次循环体 3.for语句 l   初始化等可以是多句(把 ...

  10. 6_StopWatch

    6 // // ViewController.swift // StopWatch // // Created by ZC on 16/1/9. // Copyright © 2016年 ZC. Al ...