IoC控制反轉

2021-08-29 19:55:04 字數 1637 閱讀 6041

首先假設有乙個需求,類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提出 哪些方面的控制被反轉了?這個問題。他總結出的結果是依賴物件的獲得被反轉了,因為大多數...