问题:
刚刚想用main函数测试UserService,于是写了个main函数,然后在定义了个属性service并用@Autowired+@Qualifier方式想进行自动注入:
结果发现注入一直是失败的,service一直是null。
经过查询,了解到是执行顺序问题导致:
程序执行是这样子的,先找到main方法开始执行,然后从上先执行static修饰的语句,显示初始化ac,然后开始执行main方法里的语句,由于studentService没有初始化,会在执行它的方法时报出空指针异常,程序运行失败。
为什么不会先实例化StudentService呢?因为StudentService加上@Autowired注解后,
注入是在容器中实例化对象,不再是静态的。而Java变量的初始化顺序为:静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired。main方法中只有启动项目才能加载配置文件,才能自动注入,才能找到响应的bean。
解决方法
所以,要想用main函数测试的话,还是需要改用getBean方法来得到对象。