2017-04-24 41 views
1

在基于构造函数的注入中,它将创建具有所有依赖关系的完整对象,但是如何在基于注入者的注入情况下创建具有部分依赖项的对象?为什么setter注入不能确保在Spring中依赖注入?

+0

setter是一个方法调用,并不保证该方法会被调用。使用构造函数,您无法构造处于无效状态的对象。 –

+1

Spring会调用默认的构造函数,然后尝试通过setter将值注入到此实例。你不会看到差异。无论如何,你会得到一个构造良好的物体。 – Andrew

+0

@ M.Deinum:根据我的理解,setter在默认情况下从春季被调用,那么它怎么会错过? –

回答

0

当需要依赖关系时,应使用基于构造函数的注入,因为创建对象的唯一方法是拥有所有参数。

当不需要依赖性时,应使用基于安装人员的注射。该对象首先实例化,然后调用依赖关系的设置者,但是,如果未找到依赖关系,则它将注入null。

您可以混合使用基于构造函数和基于Setters的注入。

+0

它不会注入'null'。对于不需要依赖关系的情况,它根本不会调用setter。 –