Spring踩坑记录-main方法中无法使用@Resource或者@Autowired自动注入

问题:

刚刚想用main函数测试UserService,于是写了个main函数,然后在定义了个属性service并用@Autowired+@Qualifier方式想进行自动注入:
在这里插入图片描述
结果发现注入一直是失败的,service一直是null。

经过查询,了解到是执行顺序问题导致:

程序执行是这样子的,先找到main方法开始执行,然后从上先执行static修饰的语句,显示初始化ac,然后开始执行main方法里的语句,由于studentService没有初始化,会在执行它的方法时报出空指针异常,程序运行失败。

为什么不会先实例化StudentService呢?因为StudentService加上@Autowired注解后,
注入是在容器中实例化对象,不再是静态的。而Java变量的初始化顺序为:静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired。main方法中只有启动项目才能加载配置文件,才能自动注入,才能找到响应的bean。

解决方法

所以,要想用main函数测试的话,还是需要改用getBean方法来得到对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值