首先假設有乙個需求,類business需要呼叫類dependency的方法f()
1).按照日常的做法,得到下面的**:
//**類dependency**
public class dependency ;
}//**類business**
public class business
public void dosomething()
}
2).對上述實現做出如下修改:
首先,將business裡的dependency例項的獲得該為setter方式,其次,將dependency類改為某個介面的實現。故可以得到下面新的**:
//**介面idependency**
public inte***ce idependency
//**類dependency**
//此處為介面idependency的實現
public class dependency implements idependency;
}//**類business**
public class business
public void dosomething()
public void setdependency(idependency d)
}
在新的**中,首先business的變數d可以接收任何idependency的例項,另外,dependency的例項不是通過business來獲得,而是通過setter(也可以用構造器)來由外部傳給它。這似乎跟我們往常的**沒什麼不同,但這已經是乙個良好的設計。關鍵就是dependency的例項如何從外部注入給business呢?
這就要通過xml來實現了。
建立乙個springfirst.xml,進行簡單的配置:
單有了這個xml檔案還不夠,還需要乙個測試類來載入該xml檔案,spring提供了現成的api,在載入上面的xml的時候,就進行了如下工作:例項化dependency類,例項化business類,並將dependency的例項作為引數賦給了business例項的
setdependency()方法。下面是該測試程式:
public class startserver
}
上面的程式載入了xml以後,獲得id為"business"的bean,即business類的例項,並呼叫了其dosth()方法。由此可見,business的依賴類dependency是通過xml來注入的,而且business是通過介面idependency來接收dependency例項。因此,當我們又有新的idependency的實現時,只需要修改xml檔案即可,測試程式只需要根據xml裡的id值來獲得需要的引數。
總結上面的例子,對控制反轉和依賴注入已經能理解了。依賴類(dependency)是通過外部(xml)來注入的,而不是由使用它的類(business)來自己製造,這就是依賴的注入。另一方面,business對類dependency的依賴轉移到對介面idependency的依賴,控制權由類轉移到了介面,即由"實現"轉移到"抽象"中。這就是控制反轉。
IOC 控制反轉
ioc是物件導向程式設計中的一種設計原則,可以借助 第三方 來減低計算機 之間的 耦合度 其中最常見的方式叫做依賴注入 dependency injection,簡稱di 還有一種方式叫 依賴查詢 dependency lookup 通過控制反轉,物件在被建立的時候,由乙個調控系統內所有物件的外界實...
IOC 控制反轉
想說說ioc inversion of control,控制反轉 這是spring的核心,貫穿始終。所謂ioc,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係。這是什麼意思呢,舉個簡單的例子,我們是如何找女朋友的?常見的情況是,我們到處去看 有長得漂亮身材又好的m...
IoC 控制反轉
什麼是ioc呢?控制反轉 inversion of control,ioc 是物件導向程式設計中的一種設計原則,由於理論和實踐成熟的相對較晚,所以並沒有包含在gof中。早在2004年,martin fowler提出 哪些方面的控制被反轉了?這個問題。他總結出的結果是依賴物件的獲得被反轉了,因為大多數...