内容简介:原本以为自己看了这么久的源码,分享效果应该不错,但是发现不是这样的,大部分人都是处于以为自己知道,实际上自己似是而非的情况。虽然细节,大的主线自己比较清楚,但是在告诉大家的时候,不是所有人的理解程度都和自己一样。可能自己在讲的时候,大家以为自己理解了,但是推敲推敲,就能提出很多的疑问,如果将的范围比较大,就容易把自己也绕晕了。分享的时候有疑问肯定是正常的,分享与做需求一样,要明白听众的需求是什么,能不能解决听众的需求。在自己看的时候,主线是正常的,分享的时候有疑问抛出来,才能检查自己是不是真的懂了这个知识点
原本以为自己看了这么久的源码,分享效果应该不错,但是发现不是这样的,大部分人都是处于以为自己知道,实际上自己似是而非的情况。虽然细节,大的主线自己比较清楚,但是在告诉大家的时候,不是所有人的理解程度都和自己一样。
可能自己在讲的时候,大家以为自己理解了,但是推敲推敲,就能提出很多的疑问,如果将的范围比较大,就容易把自己也绕晕了。
事务不生效的几个结论
- private,protect方法事务不生效
- final修饰符修饰的方法和类不生效。
- 在当前的bean中,没有加上事务的方法调用有事务的方法不生效。如下,调用index方法,save方法上的事务不生效。
public String index(@RequestParam("name") String name, @RequestParam("age") Integer age, @RequestParam("id") Integer id ){ save(name,age,id); return "index"; } @RequestMapping("/tx") @ResponseBody @Transactional public String save(@RequestParam("name") String name, @RequestParam("age") Integer age, @RequestParam("id") Integer id){ System.out.println("hello"); jdbcTemplate.update("insert into user(id,name,age)values(" + id + ",'"+name+"',"+age+")"); jdbcTemplate.update("insert into user(id,name,age)values(2,'"+name+"',"+age+")"); return "tx"; } 复制代码
疑问
-
CGLib动态代理时,为什么private方法和protect方法是不生效的呢?
大家为了方便记忆,都会说CGLib的动态代理是基于继承的实现,而子类无法访问private方法,所以不生效。 实际这是错误的
真实情况,CGLib可以修改字节码,在子类中实现动态代理是完全可以的,之所以没有生效则是因为Spring的事务注解在被Spring解析的时候,Spring会判断事务的方法是不是public修饰符,如果不是public修饰符的话,则不使用事务代理。
AbstractFallbackTransactionAttributeSource类中
-
为什么final方法是不生效的呢?
同样的原因,在Spring创建动态代理的时候,会判断方法的修饰符是不是final的方法,如果是Final方法则直接走原始的方法,而不经过代理方法。
另外不经过Spring的CGLib也不会代理final的方法
CGLibAopProxy的ProxyFilter类。 假设读者对Enhancer很熟悉了
-
另外还有问题
Spring生成的动态代理与代理的对象是两个Bean吗?一个Bean包装了原本的bean
注入的时候注入的是代理Bean还是实际的Bean?代理Bean
Aop的增强(Advice)和Proxy是什么关系?分JDK和CGLib,一般代理与增强是合成的...
多个AOP切到同一个切点的时候如何处理?获取拦截链,一个个执行
总结
分享的时候有疑问肯定是正常的,分享与做需求一样,要明白听众的需求是什么,能不能解决听众的需求。在自己看的时候,主线是正常的,分享的时候有疑问抛出来,才能检查自己是不是真的懂了这个知识点。
我讲的时候有几个讲的不好的地方:
- 讲的东西太多,原本只是讲Spring不生效原理,结果之外又说了Spring Bean生命周期,其它的东西去了,讲的点多,就没办法把一个点将的让大家很明白。
- 在看的时候,自己给自己提的问题少,一旦大家一起提疑问的时候,能发现有的自己搞的不是很明白。
不过也好,对Spring事物处理这块有更多的理解了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
20个月赚130亿
陈士骏、张黎明 / 中国华侨出版社 / 2011-11-17 / 35.00元
YouTube联合创始人陈士骏在书中以朴实亲切的口吻讲述了他的人生经历,以及对学业、事业、梦想、财富、生死等的种种感悟。 童年随全家去美国小镇定居,少年时代迷上计算机编程; 离大学毕业还有几个月时放弃学位,怀揣200美元奔赴硅谷,加入创业公司PayPal,公司上市后成为百万富翁; 因为无法接受PayPal被EbayeBay收购后工程师丧失发言权,和好友一起开创视频网站YouTub......一起来看看 《20个月赚130亿》 这本书的介绍吧!