Spring的事务配置有两种:1编程式事务管理配置;2声明式事务管理配置。下面介绍两种声明式事务的配置,声明式事务相比于编程式事务代码耦合更低,无序书写任何事务管理的先关代码。两种声明式事务配置策略分别是:SpringAop事务管理和Bean后处理器的代理BeanNameAutoProxyCreator管理事务。

1、SpringAop事务管理配置

1.1、配置数据源:

     <bean id="pycDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><property name="driverClass" value="${pyc.jdbc.driver}" /><property name="jdbcUrl" value="${pyc.jdbc.url}" /><property name="user" value="${pyc.jdbc.user}" /><property name="password" value="${pyc.jdbc.password}" /><property name="checkoutTimeout" value="30000" /><property name="idleConnectionTestPeriod" value="30" /><property name="maxIdleTime" value="30" /><property name="initialPoolSize" value="5" /><property name="minPoolSize" value="5" /><property name="maxPoolSize" value="20" /><property name="acquireIncrement" value="5" /></bean>

1.2、配置事务管理器

       <!-- 配置事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>

1.3、配置事务增强处理Bean

Spring提供了tx配置事务管理,<tx:advice.../>元素来配置事务增强处理,使用<aop:advisor.../>启用代理。

     <!-- 配置事务增强处理Bean,指定事务管理器 --><tx:advice id="transactionAdvice" transaction-manager="transactionManager"><!-- 配置详细事务处理语义 --><tx:attributes><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="get*" propagation="SUPPORTS" read-only="true" /><tx:method name="find*" propagation="SUPPORTS" read-only="true" /><tx:method name="select*" propagation="SUPPORTS" read-only="true" /><!-- 其他采用默认事务方式 --><tx:method name="*"/></tx:attributes></tx:advice>

1.4、AOP代理

   <!-- Spring aop事务管理 --><aop:config><!-- 配置切入点 --><aop:pointcut id="transactionPointcut"expression="execution(* org.andy.shop.service..*Impl.*(..))" /><!-- 指定在txAdvice切入点应用txAdvice事务增强处理 --><aop:advisor pointcut-ref="transactionPointcut"advice-ref="transactionAdvice" /></aop:config>

2、BeanNameAutoProxyCreator自动创建事务代理

数据源的配置、事务管理器的配置和上面的一样就在此处省略....

2.3、事务拦截器

    <!-- 声明式事务,事务拦截器 --><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="find*">PROPAGATION_REQUIRED,readOnly</prop><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean>

2.4、定义BeanNameAutoProxyCreator

BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理,BeanNameAutoProxyCreator是个根据bean名生成自动代理的代理创建器,该bean通常需要接受两个参数。第一个是beanNames属性,该属性用来设置哪些bean需要自动生成代理。另一个属性是interceptorNames,该属性则指定事务拦截器,自动创建事务代理时,系统会根据这些事务拦截器的属性来生成对应的事务代理。

 <!-- Bean后处理器BeanNameAutoProxyCreator,根据List配置创建事务代理 --><beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><!-- 下面是所有需要自动创建事务代理的bean --><property name="beanNames"><list><value>*Services</value></list></property><!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器 --><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean>

博客来源:http://blog.csdn.net/fengshizty

Spring声明式事务配置的两种策略SpringAop和Bean后处理器的代理BeanNameAutoProxyCreator相关推荐

  1. Spring声明式事务配置详解

    事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性.本文主要讲解事务涉及到一些概念以及spring中事务的使用.如有理解偏颇之处,恳请各位大神指正,小编不胜感激! 1.何为事务?   ...

  2. Spring声明式事务管理的配置详解

    环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加方法: 点击项目右键->Build Path->Add ...

  3. Spring声明式事务配置管理方法

    /*2011年8月28日 10:03:30 by Rush  */ 环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加 ...

  4. AspectJ声明式事务配置

    2019独角兽企业重金招聘Python工程师标准>>> Spring声明式事务配置,实现模拟转账过程 (AspectJ) 编程式事务要修改service层的代码,很少用,相比之下,A ...

  5. spring声明式事务管理方式( 基于tx和aop名字空间的xml配置+@Transactional注解)

    1. 声明式事务管理分类 声明式事务管理也有两种常用的方式, 一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解. 显然基于注解的方式更简单易用,更清爽. ...

  6. 总结xml配置spring-aop声明式事务配置与hibernate报错:** isno active spring和hibernate整合,原因会话工厂去路(到spring不仅仅是bean)错误

    spring事务管理太厉害了!!可以不再自管事务开发了! spring aop声明式事务配置 问题: 困扰我近十多天的的spring事务管理终于解决了, 再也不用自己管理事务了 嗯,可以删该死的hib ...

  7. Spring声明式事务管理、事务的传播行为xml配置

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. <tx:method name="insert*" propagat ...

  8. Spring 声明式事务在业务开发中容易碰到的坑总结

    Spring 声明式事务,在业务开发使用上可能遇到的三类坑,包括: 第一,因为配置不正确,导致方法上的事务没生效.我们务必确认调用 @Transactional 注解标记的方法是 public 的,并 ...

  9. Spring 声明式事务应该怎么学?

    1.引言 Spring 的声明式事务极大地方便了日常的事务相关代码编写,它的设计如此巧妙,以至于在使用中几乎感觉不到它的存在,只需要优雅地加一个 @Transactional 注解,一切就都顺理成章地 ...

  10. 【Spring学习笔记 九】Spring声明式事务管理实现机制

    什么是事务?事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用,关乎数据准确性的地方我们一定要用到事务,防止业务逻辑出错. 什么是事务管理,事务管理对于企业应用而言至 ...

最新文章

  1. Go进阶:反射3定律
  2. ML_Random_Forests
  3. Linux信号 五 信号挂起与信号掩码操作接口集
  4. python拼接mysql时遇到unsupported format character ‘?‘ “(0x82f1)“
  5. 【职场】如何才能成功的创业,创业成功的本质是什么
  6. js监听多个事件_JavaScript中的事件与异常捕获解析
  7. 高新园区到大连计算机学校,大连高新区中心小学
  8. Jn建站系统2.0源码 附视频安装教程
  9. 【DSP开发】HyperLink 编程和性能考量
  10. 能在手机播放的Flash代码
  11. Log4j与common-logging联系与区别
  12. 地理必修一三大类岩石_90后地理老师4天收700封情书!这波操作,绝了……
  13. 收到客户反馈的BUG,主管应该怎么办
  14. Java菜鸟入坑——字符串中输出数字
  15. 微信聊天记录如何恢复
  16. Kubeconfig 切换上下文
  17. 基于Java的文本相似度计算
  18. python读取csv文件‘gbk‘ codec can‘t decode byte 0xbf in position 2: illegal multibyte sequence
  19. 。。。。。。。。。。。。。
  20. mysql 不用斯芬克斯 全局模糊匹配 查询

热门文章

  1. 容器技术Docker K8s 34 容器服务ACK基础与进阶-安全管理
  2. 算法:Find First and Last Position of Element in Sorted Array(在有序数组中搜索第一个和最后一个找到的数字)
  3. java面试常考_java面试常考题
  4. java 实际参数列表_JAVA实际参数和形式参数列表长度不同
  5. KDD18 DIN Deep Interest Network for Click-Through Rate Prediction
  6. Android studio 报错 Unknown host 'jcenter.bintray.com'
  7. Linux系统重要日志文件
  8. erlang web服务器性能,100万并发连接服务器笔记之Erlang完成1M并发连接目标
  9. vue 检测ie版本_vue 兼容低版本ie浏览器
  10. 卡方检验用于特征选择