Spring控制反轉 IoC 的理解

2021-05-07 22:18:27 字數 1746 閱讀 9582

spring框架的核心就是控制反轉(inversion of control)和依賴注入(dependency injection),通過這兩方面來實現松耦合。

使用ioc,物件是被動的接受依賴類,而不是自己主動的去找。容器在例項化的時候主動將它的依賴類注入給它。可以這樣理解:控制反轉將類的主動權轉移到介面上,依賴注入通過xml配置檔案在類例項化時將其依賴類注入。通過下面的例項來逐步的理解:

首先假設有乙個需求,類business需要呼叫類dependency的方法f(),按照日常的做法,得到下面的**:

//**類dependency**

public class dependency ;

}//**類business**

public  class business

public void dosth()

}對上述實現做出如下修改:

首先,將business裡的dependency例項的獲得該為setter方式,其次,將dependency類改為某個介面的實現。故可以得到下面新的**:

//**介面idependency**

public inte***ce idependency

//**類dependency**

public class dependency ;

}//**類business**

public  class business

public void dosth()

public void setdependency(idependency d)

}在新的**中,首先business的變數d可以接收任何idependency的例項,另外,dependency的例項不是通 過business來獲得,而是通過setter(也可以用構造器)來由外部傳給它。這似乎跟我們往常的**沒什麼不同,但這已經是乙個良好的設計。關鍵 就是dependency的例項如何從外部注入給business呢?

這就要通過xml來實現了。

建立乙個springfirst.xml,進行簡單的配置:

這個配置檔案裡將dependency類和business類加入,並將dependency作為business的乙個引數。

單有了這個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的依 賴,控制權由類轉移到了介面,即由"實現"轉移到"抽象"中。這就是控制反轉。

原文及討論:http://bbs.bccn.net/thread-82938-1-1.html

Spring 控制反轉IoC

1,ioc理論背景 在使用物件導向語言開發的系統中,不同物件之間相互協作得以實現業務邏輯。就像是一塊機械手錶,通過不同齒輪的協作,讓時針 分針 秒針精確的執行。如果乙個齒輪發生故障,那麼整塊手錶的功能就要受到影響。手錶齒輪之間的關係和軟體系統中物件的耦合關係很相似。物件之間的耦合關係是必要的,也是無...

Spring之控制反轉(IOC)

目錄 0.面向介面程式設計思想 1.依賴倒置原則與好萊塢原則 2.控制反轉 3.依賴注入 4.spring是如何實現依賴注入的?4.1 beanfactory 4.2 factorybean 面向介面程式設計 不針對實現程式設計,針對超型別程式設計。超型別包括繼承和多型。而依賴倒置原則與好萊塢原則可...

spring框架 IOC控制反轉

spring的核心機制 ioc,通常被稱為控制反轉,是一種設計思想,對於某個具體的物件而言,以前是它控制其他物件,現在是所有物件都被spring控制,所以這叫控制反轉。ioc的乙個重點是在系統執行中,動態的向某個物件提供它所需要的其他物件。這一點是通過di dependency injection,...