构造方法注入和setter注入之间的区别吗?
有以下几点明显的差异:
-
在Setter注入,可以将依赖项部分注入,构造方法注入不能部分注入,因为调用构造方法如果传入所有的参数就会报错。
-
如果我们为同一属性提供Setter和构造方法注入,Setter注入将覆盖构造方法注入。但是构造方法注入不能覆盖setter注入值。显然,构造方法注入被称为创建实例的第一选项。
-
使用setter注入你不能保证所有的依赖都被注入,这意味着你可以有一个对象依赖没有被注入。在另一方面构造方法注入直到你所有的依赖都注入后才开始创建实例。
-
在构造函数注入,如果A和B对象相互依赖:A依赖于B,B也依赖于A,此时在创建对象的A或者B时,Spring抛出
ObjectCurrentlyInCreationException
。所以Spring可以通过setter注入,从而解决循环依赖的问题。
<bean id="person" class="com.oak.entity.Person"> <constructor-arg index="0" value="二狗"/> <constructor-arg index="1" value="18"/> </bean>
setter方法注入
<bean id="personSet" class="com.oak.entity.Person"> <property name="age" value="18"/> <property name="name" value="二蛋"/> </bean>
哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?
你两种依赖方式都可以使用,构造器注入和Setter方法注入。最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖。