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

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

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

这次遇到的情况是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了呜呜呜呜呜呜。先睡觉,这个问题搞了俩小时,就到这里解决了)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值