设值注入
概念: 指 IoC容器通过成员变量的setter方法来注入被依赖对象
接口
public interface User{
public addCard();
}
public interface Card{
public String getCardId();
}
接口的实现
public class Employee impements User{
private Card card;
public void setCard(Card card){
this.card = card;
}
public void addCard(){
System.out.println(card.getCardId);
}
}
public class BankCard impements Card{
public String getCardId(){
return "cardid";
}
}
public class ElectricityCard impements Card{
public String getCardId(){
return "cardid";
}
}
XML 配置文件
<beans ....>
<bean id="employee" class="com.service.impl.Employee">
<property name="card" ref="bankCard" />
</bean>
<bean id="bankCard" class="com.service.impl.BankCard" />
<bean id="electricityCard" class="com.service.impl.ElectrictyCard " />
</beans>
main方法
public static void main(String[] args) throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
Employee e = ac.getBean( "employee" , User.class );
}
构造注入
概念: 利用构造器,在构造实例时,为其完成依赖关系的初始化
接口同上
……..
部分实现
public class Employee impements User{
private Card card;
public Employee(Card card){
this.card = card;
}
public void addCard(){
System.out.println(card.getCardId);
}
}
XML 配置文件
<beans ....>
<bean id="employee" class="com.service.impl.Employee">
<constructor-arg ref="electricityCard" />
</bean>
<bean id="bankCard" class="com.service.impl.BankCard" />
<bean id="electricityCard" class="com.service.impl.ElectrictyCard " />
</beans>
小结
在Spring中,采用配置文件管理Bean的实现和依赖,通过容器中的反射来产生并初始化组件,同时各组件面向接口编程,这样组件间的耦合关系为接口层次
设置注入更容易理解,多数采用这种方式;构造注入可以决定依赖关系的注入顺序,但是可能会导致构造器笨重
对于依赖关系无须变化的注入,采用构造注入;而其他依赖关系的注入,采用设值注入。