Spring的IOC容器

控制反轉

在應用程式中的元件需要獲取資源時,傳統的方式是元件主動的從容器中獲取所需要的資源,在這樣的模式下開發人員往往需要知道在具體容器中特定資源的獲取方式,增加了學習成本,同時降低了開發效率。

反轉控制的思想完全顛覆了應用程式元件獲取資源的傳統方式:反轉了資源的獲取方向——改由容器主動的將資源推送給需要的元件,開發人員不需要知道容器是如何建立資源物件的,只需要提供接收資源的方式即可,極大的降低了學習成本,提高了開發的效率。這種行為也稱為查詢的被動形式。

IOC容器

IOC容器是Spring的核心,可以說Spring是一種基於IOC容器程式設計的框架。IOC是一張透過描述來生成或者獲取物件的技術,而這個技術不是Spring甚至不是Java獨有的。一般我們建立物件的時候是透過new關鍵字來建立的,而在Spring中則不是,可以透過xml和註解的描述來生成物件。

DI依賴注入

一個系統可以生成各種物件,並且這些物件都需要管理。物件之間並不是孤立的,他們之間還可能存在依賴的關係。例如,一個班級是由多個老師和同學組成的,那麼班級就依賴於多個老師和同學了。為此Spring提供了依賴注入的功能,使得我們能夠透過描述來管理各個物件之間的關係。在Spring把每一個需要管理的物件稱為Spring Bean,而管理這些Bean的容器稱為Spring IOC容器。IOC容器需要具備兩個基本的功能:

透過描述管理Bean,包括髮布和獲取Bean

透過描述完成Bean之間的依賴關係

IOC容器實現

IOC容器在Spring中的實現

[1]在透過IOC容器讀取Bean的例項之前,需要先將IOC容器本身例項化。

[2]Spring提供了IOC容器的兩種實現方式

(1)BeanFactory:IOC容器的基本實現,是Spring內部的基礎設施,是面向Spring本身的,不是提供給開發人員使用的。

(2)ApplicationContext:BeanFactory的子介面,提供了更多高階特性。面向Spring的使用者,幾乎所有場合都使用ApplicationContext而不是底層的BeanFactory。

Spring的IOC容器

ApplicationContext的主要實現類

ClassPathXmlApplicationContext:對應類路徑下的XML格式的配置檔案

FileSystemXmlApplicationContext:對應檔案系統中的XML格式的配置檔案

在初始化時就建立單例的bean,也可以透過配置的方式指定建立的Bean是多例項的。

ConfigurableApplicationContext

是ApplicationContext的子介面,包含一些擴充套件方法

refresh()和close()讓ApplicationContext具有啟動、關閉和重新整理上下文的能力。

WebApplicationContext

專門為web應用而準備的,它允許從相對於web根目錄的路徑中完成初始化工作

透過型別獲取bean

從IOC容器中獲取bean時,除了透過id值獲取,還可以透過bean的型別獲取。但如果同一個型別的bean在XML檔案中配置了多個,則獲取時會丟擲異常,所以同一個型別的bean在容器中必須是唯一的。

HelloWorld helloWorld = cxt。getBean(HelloWorld。 class);