前提:确定各个类上都加上了正确的组件注解,比如@Component
其实这是加载配置文件与初始化成员变量时机问题,实际上不管哪种情况下,在调用test()方法前都会创建一个对象,在对象创建前都会进行成员变量的初始化,注入过来了也会被初始化null给覆盖掉,所以造成了NPE问题
1.在默认是单例的前提下,spring容器初始化对象是在加载配置文件的时候
2.由于test()方法的执行是建立在本类对象的创建后调用的,所以在调用test()方法之前就已经完成了成员变量的初始化,也就是给成员变量赋值为null
3.不管哪种情况test调用之前都会重复调用构造方法进行初始化,所以注入进来了值,也会被null覆盖掉