淺談 Spring IOC

什麼是IOC

ioc 英文全稱:Inversion of Control 中文意思就是控制反轉。IOC是一種軟件設計思想,它可以理解成一個容器,一個可以裝任何東西的容器,任何人都可以從容器中獲取他想要的東西。在我們的java程序開發中,我們直接在對象內部通過new進行創建對象,是程序主動去創建依賴對象;而IoC是有專門一個容器來創建這些對象,即由Ioc容器來控制對象的創建;誰控制誰?當然是IoC 容器控制了對象;控制什麼?那就是主要控制了外部資源獲取(不只是對象包括比如文件等)。
爲何是反轉,哪些方面反轉了:有反轉就有正轉,傳統應用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉;而反轉則是由容器來幫忙創建及注入依賴對象;爲何是反轉?因爲由容器幫我們查找及注入依賴對象,對象只是被動的接受依賴對象,所以是反轉;哪些方面反轉了?依賴對象的獲取被反轉了。
用圖例說明一下,傳統程序設計如圖2-1,都是主動去創建相關對象然後再組合起來:

圖2-1 傳統應用程序示意圖
當有了IoC/DI的容器後,在客戶端類中不再主動去創建這些對象了,如圖2-2所示:

圖2-2有IoC/DI容器後程序結構示意圖
摘抄自 跟開濤學spring3-【第二章】 IoC 之 2.1 IoC基礎 ——跟我學Spring3

理解Spring IOC

Spring IOC 是IOC 設計思想的具體實現,我們的Spring就是主控方,而應用程序就是被控制的一方。Spring IOC 其實就是Spring 反向控制應用程序需要的資源。簡單點說就是:應用程序new 對象實例操作都交由Spring來管理。

理解Spring DI

DI 英文全稱:Dependency Injection 中文翻譯是 依賴注入。我的個人理解 IOC 和DI 其實是一回事,只不過是看待問題的角度不同而已。
IOC:Spring 反向控制應用程序需要的資源。
DI:應用程序依賴Spring爲其提供資源。
IOC 是站在Spring 的角度,而DI 是站在應用程序的角度。
在這裏插入圖片描述

Spring IOC 相關操作個人總結

關於Spring 教程個人推薦大家看 跟開濤學spring3 學習的同時自己進行總結,這樣才能讓知識成爲你的東西。下面就是我自己學習Spring的一些個人總結。

  • Spring 環境搭建與IOC HelloWorld
    主要簡單介紹如果通過xml bean標籤和註解@Component創建Spring的Bean,
    FileSystemXmlApplicationContext(工程目錄) 和ClassPathXmlApplicationContext(src目錄) 的使用和區別,以及通過@RunWith()和@ContextConfiguration進行Spring 上下文測試

  • Spring IOC之Bean初始化篇
    主要介紹Bean初始化的4種方式,分別爲:構造器初始化,靜態工廠初始化,實例工廠初始化,註解方式初始化。其中通過bean標籤進行配置class的方式就是構造器初始化,靜態工廠初始化是通過在bean標籤中factory-method屬性設置獲取實例靜態方法進行操作,實例化工廠初始化是通過bean標籤 factory-bean屬性設置實例工廠類id 和factory-method屬性設置獲取實例非靜態方法進行操作,註解的方式可以通過@Component 或 @Configuration+@Bean 進行操作。

  • Spring DI(依賴注入)Xml篇
    主要介紹通過xml配置方式注入基本類型,引用類型,list ,set,map。
    其中基本類型通過property標籤name和value進行操作,引用類型通過property標籤name和ref 屬性進行操作,list通過list+value標籤進行操作,set 通過set+value 標籤進行操作,map通過map+entry標籤+ entry標籤key和value進行操作。

  • Spring DI(依賴注入)註解篇
    主要介紹啦 通過@Value 進行基本類型值的注入 通過@Autowired 進行引用類型的注入。通過@Configuration+@Bean 完成list set map的注入。

  • Spring DI(依賴注入)構造器注入篇
    主要介紹了通過constructor-arg 標籤完成構造器方式注入。

  • Spring自動裝配(autowire)篇
    主要介紹了Spring 4種裝配的方式分別爲 默認的方式,byType,byName,constructor。我們可以通過bean標籤的autowire屬性進行配置。其中默認的方式需要我們必須配置property和ref屬性來完成操作,byType 方式不用配置property會自動根據Bean的類類型來進行匹配,byName方式不用配置property會自動根據名稱進行匹配。constructor方式不用配置property會自動根據構造器進行注入。
    @Resource通過 byName 方式自動裝配,@Autowired 通過ByType 方式自動裝配。@Autowired 和@Qualifier 可以實現ByName的效果。

  • Spring Bean的作用域和生命週期
    主要介紹了Spring 4種作用域 分別爲 單利(singleton),原型(prototype),request,session。Spring的Bean是在我們的容器初始化時進行創建,當我們的容器關閉或者銷燬時Bean會進行銷燬。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章