快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
Context ctx =        new ClassPathXmlApplicationContext("user/special/applicationContext.xml");  UserService service = (UserService) ctx.getBean("userService");     System.out.println("before method1");      service.method1();     System.out.println("after method1");      System.out.println("before method2");     service.method2();     System.out.println("after method2");      System.out.println("before method3");     service.method3();      System.out.println("after method3");     System.out.println ("before method4");     service.method4();      System.out.println("after method4");   } }

Spring事务管理高级应用难点剖析: 第2部分(6)

时间:2012-04-26 IBM 陈雄华

在运行 UserService 之前,将 Log4J 日志级别设置为 DEBUG,运行以上代码查看输出日志,如下所示 :

17:24:10,953 (AbstractBeanFactory.java:241)   - Returning  cached instance of singleton bean ''userService''  before  method1 method1 after method1 before method2 method2 after method2 before method3 method3 after method3 before  method4 17:24:10,953 (AbstractPlatformTransactionManager.java:365)   - Creating new transaction with name  [user.special.UserService.method4]:   PROPAGATION_REQUIRED,ISOLATION_DEFAULT 17:24:11,109  (DataSourceTransactionManager.java:205)   - Acquired Connection  [org.apache.commons.dbcp.PoolableConnection@165b7e]  for JDBC  transaction … 17:24:11,109  (DataSourceTransactionManager.java:265)   - Committing JDBC transaction  on Connection  [org.apache.commons.dbcp.PoolableConnection@165b7e] 17:24:11,125 (DataSourceTransactionManager.java:323)   - Releasing JDBC  Connection [org.apache.commons.dbcp.PoolableConnection@165b7e]  after  transaction 17:24:11,125 (DataSourceUtils.java:312)   -  Returning JDBC Connection to DataSource after method4

观察以上输出日志,很容易发现 method1~method3 这 3 个方法都没有被实施 Spring 的事务 增强,只有 method4 被实施了事务增强。这个结果刚才验证了我们前面的论述。

我们 通过下表描述哪些特殊方法将成为 Spring AOP 事务增强的漏网之鱼:

表 2. 不能被 Spring AOP 事务增强的方法

动态代理策略 不能被事务增强 的方法
基于接口的动态代理 除 public 外的其它所有的方法, 此外 public static 也不能被增强
基于 CGLib 的动态代理 private、static、final 的方法

Spring事务管理高级应用难点剖析: 第2部分(7)

时间:2012-04-26 IBM 陈雄华

不过,需要特别指出的 是,这些不能被 Spring 事务增强的特殊方法并非就不工作在事务环境下。只要它们被外层的 事务方法调用了,由于 Spring 的事务管理的传播特殊,内部方法也可以工作在外部方法所启 动的事务上下文中。我们说,这些方法不能被 Spring 进行 AOP 事务增强,是指这些方法不能 启动事务,但是外层方法的事务上下文依就可以顺利地传播到这些方法中。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号