码迷,mamicode.com
首页 > 编程语言 > 详细

spring gclib final @Transactional

时间:2018-12-15 16:22:38      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:5.0   遇到   bat   nsa   component   无法   原理   实例化   autowire   

最近spring项目改造为spring boot项目,spring升级到5.0.x,遇到了一个奇葩问题,抽象类Class A的属性无法注入(@Autowired),debug调用某一方法时所有的注入对象全部为null。在改造之前是没有问题的。

排查步骤:

1:以为是mybatis的原因导致 不能直接注入抽象类,尝试方案:将抽象类Class A中的所有注入,转到一个新的类Class B(非抽象@Component),然后A注入类B的对象,曲线救国,不行

2:以为是抽象类无法实例化,把抽象类干掉,所有代码下放到子类Class C (原来继承Class A的类),不行

3:从头排查,删除Class C的所有代码,只保留一个注入对象,和一个空的方法Method m1,方法上没有任何注解,方法体只打印该注入对象是否为空,发现可以了,小激动一把。

4:逐步添加注入属性和方法,重复该步骤,没有重现问题。居然!!!!!!WC

5:跟原来的类做对比,终于发现 细微差异 旧代码中方法用了 @Transactional注解,然后试着在新的代码的方法头也增加该注解,问题重现!!!!!!

6:bing方案,发现蛛丝马迹,有一篇文章说到CGLib无法处理final,回头检查代码,果然如此!!!!!!

bug修改后研究了一下CGLib的原理!!!!

spring gclib final @Transactional

标签:5.0   遇到   bat   nsa   component   无法   原理   实例化   autowire   

原文地址:https://www.cnblogs.com/zhonghuahero/p/10123631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!