激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 理解Spring中的依賴注入和控制反轉

理解Spring中的依賴注入和控制反轉

2021-02-20 11:29jinnianshilongnian Java教程

這篇文章主要介紹了理解Spring中的依賴注入和控制反轉,具有一定參考價值,需要的朋友可以了解下。

學習過spring框架的人一定都會聽過spring的ioc(控制反轉) 、di(依賴注入)這兩個概念,對于初學spring的人來說,總覺得ioc 、di這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對spring框架的ioc的理解以及談談我對spring ioc的理解。

ioc是什么

ioc—inversionofcontrol,即“控制反轉”,不是什么技術,而是一種設計思想。在java開發中,ioc意味著將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控制。

ioc,這是spring的核心,貫穿始終。所謂ioc,對于spring框架來說,就是由spring來負責控制對象的生命周期和對象間的關系。這是什么意思呢,舉個簡單的例子,我們是如何找女朋友的?常見的情況是,我們到處去看哪里有長得漂亮身材又好的mm,然后打聽她們的興趣愛好、qq號、電話號、ip號、iq號………,想辦法認識她們,投其所好送其所要,然后嘿嘿……這個過程是復雜深奧的,我們必須自己設計和面對每個環節。傳統的程序開發也是如此,在一個對象中,如果要使用另外的對象,就必須得到它(自己new一個,或者從jndi中查詢一個),使用完之后還要將對象銷毀(比如connection等),對象始終會和其他的接口或類藕合起來。

如何理解好ioc呢?理解好ioc的關鍵是要明確“誰控制誰,控制什么,為何是反轉(有反轉就應該有正轉了),哪些方面反轉了”,那我們來深入分析一下:

●誰控制誰,控制什么:傳統javase程序設計,我們直接在對象內部通過new進行創建對象,是程序主動去創建依賴對象;而ioc是有專門一個容器來創建這些對象,即由ioc容器來控制對象的創建;誰控制誰?當然是ioc容器控制了對象;控制什么?那就是主要控制了外部資源獲?。ú恢皇菍ο蟀ū热缥募龋?/p>

●為何是反轉,哪些方面反轉了:有反轉就有正轉,傳統應用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉;而反轉則是由容器來幫忙創建及注入依賴對象;為何是反轉?因為由容器幫我們查找及注入依賴對象,對象只是被動的接受依賴對象,所以是反轉;哪些方面反轉了?依賴對象的獲取被反轉了。

用圖例說明一下,傳統程序設計如圖1-1,都是主動去創建相關對象然后再組合起來:

理解Spring中的依賴注入和控制反轉

圖1-1 傳統應用程序示意圖

當有了ioc/di的容器后,在客戶端類中不再主動去創建這些對象了,如圖1-2所示:

理解Spring中的依賴注入和控制反轉

圖1-2有ioc/di容器后程序結構示意圖

1.1.2ioc能做什么

ioc不是一種技術,只是一種思想,一個重要的面向對象編程的法則,它能指導我們如何設計出松耦合、更優良的程序。傳統應用程序都是由我們在類內部主動創建依賴對象,從而導致類與類之間高耦合,難于測試;有了ioc容器后,把創建和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,所以對象與對象之間是松散耦合,這樣也方便測試,利于功能復用,更重要的是使得程序的整個體系結構變得非常靈活。

其實ioc對編程帶來的最大改變不是從代碼上,而是從思想上,發生了“主從換位”的變化。應用程序原本是老大,要獲取什么資源都是主動出擊,但是在ioc/di思想中,應用程序就變成被動的了,被動的等待ioc容器來創建并注入它所需要的資源了。

ioc很好的體現了面向對象設計法則之一——好萊塢法則:“別找我們,我們找你”;即由ioc容器幫對象找相應的依賴對象并注入,而不是由對象主動去找。

1.1.3ioc和di

di—dependencyinjection,即“依賴注入”:是組件之間依賴關系由容器在運行期決定,形象的說,即由容器動態的將某個依賴關系注入到組件之中。依賴注入的目的并非為軟件系統帶來更多功能,而是為了提升組件重用的頻率,并為系統搭建一個靈活、可擴展的平臺。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。

ioc的一個重點是在系統運行中,動態的向某個對象提供它所需要的其他對象。這一點是通過di(dependency injection,依賴注入)來實現的。比如對象a需要操作數據庫,以前我們總是要在a中自己編寫代碼來獲得一個connection對象,有了 spring我們就只需要告訴spring,a中需要一個connection,至于這個connection怎么構造,何時構造,a不需要知道。在系統運行時,spring會在適當的時候制造一個connection,然后像打針一樣,注射到a當中,這樣就完成了對各個對象之間關系的控制。a需要依賴 connection才能正常運行,而這個connection是由spring注入到a中的,依賴注入的名字就這么來的。那么di是如何實現的呢? java 1.3之后一個重要特征是反射(reflection),它允許程序在運行的時候動態的生成對象、執行對象的方法、改變對象的屬性,spring就是通過反射來實現注入的。

理解di的關鍵是:“誰依賴誰,為什么需要依賴,誰注入誰,注入了什么”,那我們來深入分析一下:

●誰依賴于誰:當然是應用程序依賴于ioc容器;

●為什么需要依賴:應用程序需要ioc容器來提供對象需要的外部資源;

●誰注入誰:很明顯是ioc容器注入應用程序某個對象,應用程序依賴的對象;

●注入了什么:就是注入某個對象所需要的外部資源(包括對象、資源、常量數據)。

ioc和di由什么關系呢?其實它們是同一個概念的不同角度描述,由于控制反轉概念比較含糊(可能只是理解為容器控制對象這一個層面,很難讓人想到誰來維護對象關系),所以2004年大師級人物martinfowler又給出了一個新的名字:“依賴注入”,相對ioc而言,“依賴注入”明確描述了“被注入對象依賴ioc容器配置依賴對象”。

總結

其實對于spring ioc這個概念,每個人都有自己的理解,并沒有標準答案,大致方向沒錯即可。

以上就是本文關于理解spring中的依賴注入和控制反轉的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://jinnianshilongnian.iteye.com/blog/1413846

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 牛牛a级毛片在线播放 | 国产乱淫av | 欧美不卡 | 国产精品伦视频看免费三 | 日本aaaa片毛片免费观看视频 | 欧美一级电影网站 | 欧美国产一级片 | 日韩精品久久久久久久电影99爱 | 2019亚洲日韩新视频 | 欧美一区在线观看视频 | 日本精品视频一区二区三区四区 | 国产日韩在线观看一区 | 国产精品久久久久久久久久久久久久久 | 欧美成人一区二区三区电影 | 国产欧美日韩在线不卡第一页 | 麻豆911 | 欧美大逼网| av不卡毛片 | 羞羞的网站 | 成人三级电影在线 | 7m视频成人精品分类 | 色婷婷综合久久久中文一区二区 | 毛片免费观看视频 | 99在线热视频 | 久久久久久久久久久久免费 | 日本在线视频免费观看 | 日韩视频中文 | 日本一区二区三区视频在线 | 成年人福利视频 | 国产精品久久久久免费视频 | 美国av免费看 | 久久久久国产精品久久久久 | 成人在线免费看 | 国产免费永久在线观看 | 久久久久久久久久久久久久国产 | 一级黄色免费观看 | 国产精品久久久久久久久久东京 | 一级美女大片 | 综合国产一区 | 久久久精品视频国产 | 久久久www成人免费毛片 |