先看一段代碼
假設你編寫了兩個類,一個是人(Person),一個是手機(Mobile)。
人有時候須要用手機打電話,須要用到手機的dialUp方法。
傳統的寫法是這樣:
Java code
public class Person{
public boolean makeCall(long number){
Mobile mobile=new Mobile();
return mobile.dialUp(number);
}
}
也就是說,類Person的makeCall方法對Mobile類具備依賴,必須手動生成一個新的實例new Mobile()才能夠進行以後的工做。
依賴注入的思想是這樣,當一個類(Person)對另外一個類(Mobile)有依賴時,再也不該類(Person)內部對依賴的類(Moblile)進行實例化,而是以前配置一個beans.xml,告訴容器所依賴的類(Mobile),在實例化該類(Person)時,容器自動注入一個所依賴的類(Mobile)的實例。
接口:
Java code
public Interface MobileInterface{
public boolean dialUp(long number);
}
Person類:
Java code
public class Person{
private MobileInterface mobileInterface;
public boolean makeCall(long number){
return this.mobileInterface.dialUp(number);
}
public void setMobileInterface(MobileInterface mobileInterface){
this.mobileInterface=mobileInterface;
}
}
在xml文件中配置依賴關係
Java code
<bean id="person" class="Person">
<property name="mobileInterface">
<ref local="mobileInterface"/>
</property>
</bean>
<bean id="mobileInterface" class="Mobile"/>
這樣,Person類在實現撥打電話的時候,並不知道Mobile類的存在,它只知道調用一個接口MobileInterface,而MobileInterface的具體實現是經過Mobile類完成,並在使用時由容器自動注入,這樣大大下降了不一樣類間相互依賴的關係。this