new对象与Spring对bean的初始化的差别
程序员文章站
2022-05-21 22:25:54
...
这个问题是一次我将老系统代码迁移到基于Spring构建的新系统中时遇到的,老代码中有很多地方使用了new方法来初始化对象,当时也没有特别注意,最后联调的时候发现所有new出来的对象中使用Autowired自动依赖注入的属性全都抛出了NullPointerException。什么意思呢?
@Component
Class A {
...
}
@Component
Class B {
...
}
@Component
Class C {
@Autowired
A a;
@Autowired
B b;
}
当我使用C c = new C()时,c中的a和b都是null,也就是无法完成注入。
说实话,在联调的那一刻我有一瞬间是懵逼的,但现在回想起来,哦,真是太傻了。
简单来理解,Spring首先会通过new方法创建一个对象,然后去完成属性的填充,而这种填充在我们外界看来是“自动”的;而我们直接通过new方法创建对象时,是没有谁去完成属性的填充的,因而内部属性值全为null。