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

问题:

刚刚想用main函数测试UserService,于是写了个main函数,然后在定义了个属性service并用@Autowired+@Qualifier方式想进行自动注入:
Spring踩坑记录-main方法中无法使用@Resource或者@Autowired自动注入_第1张图片
结果发现注入一直是失败的,service一直是null。

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

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

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

解决方法

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

你可能感兴趣的:(spring,spring,java)