zoukankan      html  css  js  c++  java
  • spring cglib final @Transactional

    最近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的原理!!!!

  • 相关阅读:
    Binary Tree Paths
    Implement Stack using Queues
    Path Sum II
    Path Sum
    Plus One
    Add Digits
    Missing Number
    H-Index II
    H-Index
    Ugly Number II
  • 原文地址:https://www.cnblogs.com/zhonghuahero/p/10123631.html
Copyright © 2011-2022 走看看