ioc,Inversion of Control(控制反轉),是Spring中的一種設計思想而非技術,
我們可以從4個方面理解ioc:
①誰控制誰? ——Ioc容器控制物件,
②控制了什么? ——Ioc容器控制了獲取物件及其外部資源,
③為什么是反轉? ——傳統的javaSE技術是手動new物件的,通過new的物件直接控制資源的(相當于“正轉”);而spring是使用Ioc容器創建物件并獲取外部資源,相當于通過第三方查詢獲取(相當于“反轉”),即:傳統技術是主動創建物件,而ioc思想是被動接受依賴物件,
④怎么實作反轉的?——通過依賴注入(DI)的方式實作反轉(這里的反轉即:獲取物件的方式),
DI,Dependency Injection(依賴注入),是將容器動態地注解到應用程式中,
簡單地說,DI是通過注解的方式獲取到物件以及一些外部資源,
DI和ioc其實是一個東西,只是理解的層面不同,通俗地說,ioc層面理解就是:獲取物件的方式不再是我們主動創建尋找,而是多了個‘中介’去幫我們查詢物件并尋找,DI層面理解就是:寫代碼的時候,要用到某個物件及資源,我們不再需要去查詢那個物件在哪里,并且new物件,我們只需要配置好就可以直接通過@獲取我們需要的資源,
耦合和內聚
值得一提的是,ioc思想由于通過第三方ioc容器創建物件,能夠減少代碼的耦合性,從而使得代碼更優,
看到這里也許有些人開始蒙了,為啥低耦合代碼更優?這樣一句話你或許聽過:“我們寫代碼都要盡量向低耦合高內聚靠近!”這說明,低耦合高內聚的代碼更好,你只需要知道這一點就夠了,至于它們的理解,請繼續往下看:
耦合和內聚都是評判軟體程式優劣的一個標準,
理解耦合:
耦合指的是元素與元素之間的連接關系、依賴程度等,
舉個例子,在類1參考類2的變數,我們需要new 類2的物件,這個時候類1和類2產生了一種依賴性:假如類2發生了改變或者消失,類1就會出現問題(報錯),類1與類2的這種關系,就是一種耦合,因為它們之間有一種依賴性,
上述只有兩個類作比較,看不出什么,但是如果很多個類之間相互參考(也就是“高耦合”),創建其他類的物件,如果其中一些類做了修改或其他什么,想象一下,會報多少錯?查詢起來會多麻煩?作業效率是不是大打折扣了?
所以,低耦合的代碼會更優,
有的人可能會問,那為什么ioc思想相對傳統JavaSE技術就是低耦合的?
ioc思想是通過Ioc容器創建物件,相當于通過第三方查詢物件并獲取外部資源,是沒有直接建立聯系的,因此也就不存在高耦合的問題,注解之后資源就自動引入了,
理解內聚:
內聚通常指的是功能內聚,即程式之間的共同性,
用一句俗語解釋:術業有專攻,各行各業,只需要管屬于他們行業范圍內的事情就可以了,內聚也是這個意思,
舉個例子,我要寫一個心理測驗系統,那么主要功能就是心理測驗,我寫的所有代碼如果都是心理測驗核心代碼,那么就是100%內聚,也就是超高內聚了,當然只是舉個例子便于理解哈,
高內聚就是要我們寫的代碼盡可能相關,也就是所有程式盡可能圍繞某個具體的功能點,這樣程式更具體,也更便于管理,
轉載自如何理解Spring框架中的ioc?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543721.html
標籤:Java
