`

BeanNameAutoProxyCreator自动创建事务代理

 
阅读更多
TranscationInterceptor是一个事务拦截器bean,需要传入一个TransactionManager的引用。配置中使用 Spring依赖注入该属性,事务拦截器的事务属性通过transactionAttributes来指定;下面是配置spring事务的代码:

<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager" ref="transactionManager"/>
  <property name="transactionAttributes">
   <props>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
   </props>
  </property>
</bean>

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

  <property name="interceptorNames">
   <list>
    <value>transactionInterceptor</value>
   </list>
  </property>
</bean>

<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
  <property name="transactionInterceptor" ref="transactionInterceptor"/>
</bean>
红色的代表了事务的规则---PROPAGATION_REQUIRED 即事务传播:有事务则加入 无事务则创建

       Exception代表的是如果抛出Exception则事务回滚

       readOnly代表了不能对session的对象进行修改。


BeanNameAutoProxyCreator  是个根据拦截器来实现的事务控制器,我们一般使用配置一个org.springframework.transaction.interceptor.TransactionInterceptor来作为事务拦截器;

在拦截器的内部有两个属性transactionManager,transactionAttributes;

transactionManager指的是事务‘管理者’(这也是需要配置一个bean)它的一个属性是sessionFactory;

transactionAttributes 指的是事务的属性  spring支持七种事务属性

PROPAGATION_REQUIRED 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。

PROPAGATION_SUPPORTS 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。

PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

PROPAGATION_NOT_SUPPORTED  总是非事务地执行,并挂起任何存在的事务。

PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常 ;

PROPAGATION_NESTED如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行,使用PROPAGATION_NESTED,还需要把PlatformTransactionManager的nestedTransactionAllowed属性设为true;
而nestedTransactionAllowed属性值默认为false; 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。

PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别:它们非常类似,都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。使用PROPAGATION_REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同时它需要JTA事务管理器的支持。
使用PROPAGATION_NESTED时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。DataSourceTransactionManager使用savepoint支持PROPAGATION_NESTED时,需要JDBC 3.0以上驱动及1.4以上的JDK版本支持。其它的JTA TrasactionManager实现可能有不同的支持方式。

PROPAGATION_REQUIRED应该是我们首先的事务传播行为。它能够满足我们大多数的事务需求。
分享到:
评论

相关推荐

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    --定义DAO Bean ,由于BeanNameAutoProxyCreator自动生成事务代理--&gt; class="com.service.impl.UserManagerImpl"&gt; singleton="false"&gt; &lt;/beans&gt;

    AOP usage -- BeanNameAutoProxyCreator usage

    NULL 博文链接:https://tomboxfan.iteye.com/blog/350398

    Spring实现自动代理Demo

    Spring实现自动代理Demo,BeanNameAutoProxyCreator的运用,学习参考原理

    spring in action英文版

     5.6.2 自动代理事务  5.7 小结  第6章 远程调用  6.1 Spring远程调用概览  6.2 与RMI一起工作  6.2.1 连接RMI服务  6.2.2 输出RMI服务  6.3 使用Hessian和Burlap的远程调用  6.3.1 访问...

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. 操作被通知对象 7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.1.1. BeanNameAutoProxyCreator 7.9.1.2. DefaultAdvisorAutoProxyCreator ...

    Spring.3.x企业应用开发实战(完整版).part2

    6.5 自动创建代理 6.5.1 实现类介绍 6.5.2 BeanNameAutoProxyCreator 6.5.3 DefaultAdvisorAutoProxyCreator 6.6 小结 第7章 基于@AspectJ和Schema的AOP 7.1 Spring对AOP的支持 7.2 JDK 5.0注解知识快速进阶 7.2.1 ...

    Spring3.x企业应用开发实战(完整版) part1

    6.5 自动创建代理 6.5.1 实现类介绍 6.5.2 BeanNameAutoProxyCreator 6.5.3 DefaultAdvisorAutoProxyCreator 6.6 小结 第7章 基于@AspectJ和Schema的AOP 7.1 Spring对AOP的支持 7.2 JDK 5.0注解知识快速进阶 7.2.1 ...

    struts spring hibernate完整环境配置

    本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate 3.1 的... BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 希望大家喜欢

    struts spring hibernate完整环境配置4/4

    本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate ... BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 希望大家喜欢 4/4

    struts spring hibernate完整环境配置3/4

    本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate ... BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 希望大家喜欢 3/4

    开源框架 Spring Gossip

    IntroductionInterceptor DelegatingIntroductionInterceptor Autoproxing 自动代理可以让您不用为每一个要被 Advised 的 Target 手动定义代理物件,透过 Bean 名称或是 Pointcut 的比对,自动为...

    spring学习笔记

    Spring的Ioc Spring的AOP , AspectJ Spring的事务管理 , 三大框架的整合 目录 1.1 Spring 框架学习路线:..........................................................................................................

    struts2驱动包

    nested exception is java.lang.AbstractMethodError: org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator.postProcessAfterInstantiation(Ljava/lang/Object;Ljava/lang/String;)Z at org....

    SPRING API 2.0.CHM

    BeanNameAutoProxyCreator BeanNameAware BeanNameUrlHandlerMapping BeanNameViewResolver BeanNotOfRequiredTypeException BeanPostProcessor BeanPropertyBindingResult BeanPropertySqlParameterSource ...

    spring-framework-reference4.1.4

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    spring-framework-reference-4.1.2

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

Global site tag (gtag.js) - Google Analytics