对象实例化在bean注入之前导致@Autowired失效

开发时遇到一个问题,Springboot的@Autowired失效,无法注入bean,获取的到的mqttProperties一直为空。

MqttProperties定义:
在这里插入图片描述
业务代码:
在这里插入图片描述
按理来说,我的MqttProperties和当前类 NettyMqttClient都注册为了bean,依赖注入应该没问题的,但是MqttProperties一直为空。和泽森讨论后发现MqttClient类声明为了属性,导致MqttClient对象在getMqttClient()方法之前就初始化,此时SpringBoot的bean还未注入,所以取到的值是空。

问题出在MqttClient的实例化时机。Bean的注入通常发生在当前bean的实例化之后。我这里MqttClient的实例化是在类的成员变量处进行的,而不是作为一个Spring Bean被管理。

类加载顺序:
1、父类优先于子类
2、属性优先于代码块优先于构造方法
3、静态优先于非静态
4、bean依赖注入在类初始化之后

解决方法:

1.将MqttClient声明为Spring Bean:将MqttClient声明为一个Spring Bean,通过依赖注入的方式获取MqttClient实例。这样Spring容器会负责实例化MqttClient并处理依赖注入

2.在方法中使用MqttClient:在方法中初始化MqttClient可以确保在此之前MqttProperties已经被注入了。
在这里插入图片描述

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩茫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值