Spring的IOC

好幾次面試都遇到面試官問:"你簡歷上說你熟悉ssh框架,那你簡單談談spring中的ioc,aop等",遇到這類問題我真的很後悔之前爲什麼不好好打基礎看概念然後在實踐(因爲學這個的時候我都是邊看視頻邊實踐的,所以過了一段時間概念性的東西很快就忘記了)。現在來總結下IOC是個什麼東西,呵呵。

  概念:IoC (Inverse of Control,控制反轉),是指類A中有一個類B的對象,本來需要開發者在類A中初始化這個對象的,現在經過配置,spring可以自動地完成類A中的類B對象的初始化。這個過程也可以被叫作DI (Depend Injection,依賴注入),因爲B類對象依賴於A類,通過spring 類B變量被注入到了A類的對象中。下面詳細介紹緣由:

  IOC是spring的核心,貫穿始終。所謂的IOC,對於spring框架來說,就是由spring來負責控制對象的生命週期和對象間的關係。舉個簡單的例子來說,我們如何找女朋友的?常見的情況是我們到處去看哪裏有長得漂亮身材又好的的mm,然後想法設法的認識她們等流程,我們必須自己設計和麪對每個環節。傳統的程序開發也是如此,在一個對象中,如果要使用另外的對象則必須得到它(要麼自己new一個,要麼從JNDI中查詢一個)使用完之後還要將對象摧毀等流程,對象始終會和其他的接口或類耦合在一起。、

  然而,IOC是如何做到的呢,有點像你通過婚介找女朋友,通過第三方給你介紹,介紹認識之後,你們自己做自己想做的事情。然而這個第三方卻管理了很多男男女女的資料,你只要告訴你的需求,它就會通過你的需要給你找到相關的mm;如果找到不到就會拋出異常。整個過程不再由我自己控制,而是有婚介這樣一個類似容器的機構來控制。Spring所倡導的開發方式就是如此,所有的類都會在spring容器中登記,告訴spring你是個什麼東西,你需要什麼東西,然後spring會在系統運行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的創建、銷燬都由 spring來控制,也就是說控制對象生存週期的不再是引用它的對象,而是spring。對於某個具體的對象而言,以前是它控制其他對象,現在是所有對象都被spring控制,所以這叫控制反轉。如圖一,由於引進了中間位置的“第三方”,也就是IOC容器

圖1  

   IOC除了控制反轉這個稱呼之後,後面出現與之相關的稱呼DI(Dependency Injection, 依賴注入)來實現的。比如對象A需要操作數據庫,而我們以前每次都是在A中編寫代碼獲取一個Connection對象,而有spring就需要告訴spring,A中需要一個Connection對象,至於該對象怎麼構造,何時構造,A對象無需知道。在系統運行時,spring會在適當的時候構造一個Connection,注入到A當中,這樣就完成了對各個對象之間關係的控制。而需要依賴Connection才能正常運行,而Connection是由spring注入到A當中的。這就是依賴注入。

   作用(好處):配置靈活。 IOC模式,系統中通過引入實現了IOC模式的IOC容器,即可由IOC容器來管理對象的生命週期、依賴關係等,從而使得應用程序的配置和依賴性規範與實 際的應用程序代碼分開。其中一個特點就是通過文本的配件文件進行應用程序組件間相互關係的配置,而不用重新修改並編譯具體的代碼。 因爲把對象生成放在了XML裏定義,所以當我們需要換一個實現子類將會變成很簡單(一般這樣的對象都是現實於某種接口的),只要修改XML就可以了。雖然說修改XML後不需要重新編譯java代碼,但XML經常與java源代碼一起打包。所有想要修改XML的話,還是需要重新打包,還是免不了重新發布。就算修改java代碼,重新編譯這些修改後的代碼,也不是太麻煩。那使用IOC模式最本質的好處是什麼呢?有一種說法是,寫大型程序的時候,會用到很多其他人開發的java類。當程序員甲用到程序員乙開發的java類A時,如果使用IOC,在程序員乙寫好XML配置文件後,程序員甲就不需要關心類A應如果初始化的問題,直接使用即可。IOC有利於在多人開發大型程序中提高開發效率。

  實現原理:java的反射機制。
 

spring ioc初始化的流程結合上圖
步驟編號 完成的工作
1 spring容器讀取配置文件,解析稱註冊表
2 根據註冊表,找到相應的bean實現類實例化bean
3 把實例化之後的bean放到spring容器中
4 spring開放準備好的bean供程序使用

  spring ioc的整體流程,xml配置

 

最近整理了學習材料,有需要的請下載,我放微信裏面了,方便下載,還能交流,掃描我的二維碼頭像即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章