快速业务通道

Spring事务管理高级应用难点剖析: 第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13

这些不能被 Spring 事务增强的方法和可被 Spring 事务增强的方法唯一的区别在 “是否可以主动启 动一个新事务”:前者不能而后者可以。对于事务传播行为来说,二者是完全相同的,前 者也和后者一样不会造成数据连接的泄漏问题。换句话说,如果这些“特殊方法” 被无事务上下文的方法调用,则它们就工作在无事务上下文中;反之,如果被具有事务上下文 的方法调用,则它们就工作在事务上下文中。

对于 private 的方法,由于最终都会被 public 方法封装后再开放给外部调用,而 public 方法是可以被事务增强的,所以基本上没有 什么问题。在实际开发中,最容易造成隐患的是基于 CGLib 的动态代理时的“public static”和“public final”这两种特殊方法。原因是它们本身是 public 的 ,所以可以直接被外部类(如 Web 层的 Controller 类)调用,只要调用者没有事务上下文, 这些特殊方法也就以无事务的方式运作。

小结

在本文中,我们通过剖析了解到 以下的真相:

混合使用多个数据访问技术框架的最佳组合是一个 ORM 技术框架(如 Hibernate 或 JPA 等)+ 一个 JDBC 技术框架(如 Spring JDBC 或 iBatis)。直接使用 ORM 技术框架对应的事务管理器就可以了,但必须考虑 ORM 缓存同步的问题;

Spring AOP 增强有两个方案:其一为基于接口的动态代理,其二为基于 CGLib 动态生成子类的代理。由于 Java 语法的特性,有些特殊方法不能被 Spring AOP 代理,所以也就无法享受 AOP 织入带来 的事务增强。

在下一篇文章中,笔者将继续分析 Spring 事务管理的以下难点:

直接获取 Connection 时,哪些情况会造成数据连接的泄漏,以及如何应对;

除 Spring JDBC 外,其它数据访问技术数据连接泄漏的应对方案。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号