首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

发现用Spring配备事务不爽的一个地方

2012-10-31 
发现用Spring配置事务不爽的一个地方举个例子:...IService service ..service.batchDeleteOrder(orders).

发现用Spring配置事务不爽的一个地方
举个例子:

...  IService service ..  service.batchDeleteOrder(orders);...  


测试,发现删除竟然没有成功?
然后就是调试,发现调用batchDeleteOrder是,spring很正确的没有启动事务,然后循环调用每个deleteOrder,预期sping对单个deleteOrder方法调用启用事务,很遗憾,spring没有这么做!

spring的事务其实是通过proxy我们的service来提供事务保护的,当我们调用service的某个方法时(注意,时someServive.***method这种形式的调用),spring会拦截下来,提供事务保护,然后调用真是的业务对象的方法,一旦我们进入真实的业务对象方法以后,所发生的调用本service内部的任何method,spring是无法知道的,也就不可能提供事务保护。解决的方法,就是把batch的内容放到action,循环调用deleteOrder,或者把batch部分的内容移出来到一个新的Interface。

总结:spring的transactionAttribute所配置的key值,仅仅对外部调用有效,也就是通过someservie.***方式才有效。 1 楼 dennis_zane 2007-05-11   拦截内部方法的调用,恐怕需要aspectJ 2 楼 balaschen 2007-05-11   dennis_zane 写道拦截内部方法的调用,恐怕需要aspectJ
aspectJ管用吗?没用过,不是很清楚,不过怀疑aspectJ能否实现,如果对内部方法进行拦截,似乎会造成递归?

热点排行