• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Spring boot自动注入对象为null的问题

武飞扬头像
qq_37414878
帮助5

首先这问题可能的情况很多,这里不再赘述一些常见的错误。

长不看的省流:构造函数里不要调用自动注入的对象

这次遇到的情况是service里面注入mapper,然后一直是null值——剧透一下,问题就在于是在构造函数里面调用了mapper。如果看到这里知道为什么会null,那下面的大佬就不用看了(x)

开始以为是bean的创建顺序问题,去搜了@Order等一系列东西,觉得指定mapper先于service完成创建就可以正常注入了,但是都没有解决。
最后通过 mapper上@Repository指定名称,再@DependsOn指定mapper,成功的在调试中看到了mapper的构造方法先于service的调用,但是仍然不能成功注入——为什么这里不说完成注入,而是说构造方法的调用顺序,或者说是对象的创建顺序呢?这就是问题的所在了

可以先去看一下这篇文章
SpringBoot学习之@PostConstruct、@Autowired与构造函数的执⾏顺序
百度文库的,相当垃圾,不过我们记住他开头的结论就够好了:

执行顺序是:构造函数 => @Autowired => @PostConstruct

而我这里的调用情况是学新通

学新通

学新通

学新通

这就很显然了,构造函数里面的时候调用mapper的时候,字段的值还没有开始注入呢,那自然是null了

所以解决办法:把你希望用构造函数执行的功能提出去一个void方法,变成用@PostConstruct来执行(我记得好像这玩意要public void来着,但是这里private也能用……回头再说.jpg)
学新通
这样一来, 就可以成功看到注入的东西了

学新通

(然后发现我redis被之前寄掉的硬盘带走了,还得重装一下,而现在已经半夜3:50了呜呜呜呜呜呜。先睡觉,这个问题搞了俩小时,就到这里解决了)

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhiege
系列文章
更多 icon
同类精品
更多 icon
继续加载