IOC,控制反轉的意思,DI是依賴注入

2021-08-09 19:54:21 字數 1878 閱讀 9244

所謂控制反轉,即依賴關係的獲取方式(controll)反過來了。所謂依賴,從程式的角度看,就是比如a要呼叫b的方法,那麼a就依賴於b,反正a要用到b,則a依賴於b。所謂反轉(inversion),你必須理解如果不反轉,會怎麼著,因為a必須要有b,才可以呼叫b,如果不反轉,意思就是a主動獲取b的例項:b b = new b(),這就是最簡單的獲取b例項的方法(當然還有各種設計模式可以幫助你去獲得b的例項,比如工廠、locator等等),然後你就可以呼叫b物件了。

所以,不反轉,意味著a要主動獲取b,才能使用b;到了這裡,你就應該明白了反轉的意思了。倒置就是a要呼叫b的話,a並不需要主動獲取b,而是由其它人自動將b送上門來。

形象的舉例就是:

通常情況下,假如你有一天在家裡口渴了,要喝水,那麼你可以到你小區的小賣部去,告訴他們,你需要一瓶水,然後小賣部給你一瓶水!

這本來沒有太大問題,關鍵是如果小賣部很遠,那麼你必須知道:從你家如何到小賣部;小賣部裡是否有你需要的水;你還要考慮是否開著車去;等等等等,也許有太多的問題要考慮了。也就是說,為了一瓶水,你還可能需要依賴於車等等這些交通工具或別的工具,問題是不是變得複雜了?那麼如何解決這個問題呢?

解決這個問題的方法很簡單:小賣部提供送貨上門服務,凡是小賣部的會員,你只要告知小賣部你需要什麼,小賣部將主動把貨物給你送上門來!這樣一來,你只需要做兩件事情,你就可以活得更加輕鬆自在:

第一:向小賣部註冊為會員

第二:告訴小賣部你需要什麼

是不是和spring的做法很類似呢?spring就是小賣部,你就是a物件,水就是b物件

第一:在spring中宣告乙個類:a

第二:告訴spring,a需要b

假設a是useraction類,而b是userservice類

在spring這個商店(工廠)中,有很多物件/服務:userservice,documentservice,orgservice,也有很多會員:useraction等等,宣告useraction需要userservice即可,spring將通過你給它提供的通道主動把userservice送上門來,因此useraction的**示例類似如下所示:

package org.leadfar.web;

public class useraction

public void setuserservice(userservice userservice)

}在這段**裡面,你無需自己建立userservice物件(spring作為背後無形的手,把userservice物件通過你定義的setuserservice()方法把它主動送給了你,這就叫依賴注入!)

spring依賴注入的實現技術是:動態**

再說說aop,即面向切面程式設計,面向切面程式設計的目標就是分離關注點。什麼是關注點呢,就是你要做的事,就是關注點。假如你是個公子哥,沒啥人生目標,天天就是衣來伸手,飯來張口,整天只知道玩一件事!那麼,每天你一睜眼,就光想著吃完飯就去玩(你必須要做的事),但是在玩之前,你還需要穿衣服、穿鞋子、疊好被子、做飯等等等等事情,這些事情就是你的關注點,但是你只想吃飯然後玩,那麼怎麼辦呢?這些事情通通交給別人去幹。在你走到飯桌之前,有乙個專門的僕人a幫你穿衣服,僕人b幫你穿鞋子,僕人c幫你疊好被子,僕人c幫你做飯,然後你就開始吃飯、去玩(這就是你一天的正事),你幹完你的正事之後,回來,然後一系列僕人又開始幫你幹這個幹那個,然後一天就結束了!

aop的好處就是你只需要**的正事,其它事情別人幫你幹。也許有一天,你想裸奔,不想穿衣服,那麼你把僕人a解雇就是了!也許有一天,出門之前你還想帶點錢,那麼你再僱乙個僕人d專門幫你幹取錢的活!這就是aop。每個人各司其職,靈活組合,達到一種可配置的、可插拔的程式結構。

從spring的角度看,aop最大的用途就在於提供了事務管理的能力。事務管理就是乙個關注點,你的正事就是去訪問資料庫,而你不想管事務(太煩),所以,spring在你訪問資料庫之前,自動幫你開啟事務,當你訪問資料庫結束之後,自動幫你提交/回滾事務!

控制反轉 IoC 與依賴注入 DI

最近幾天在 研究容器。發現有幾個理念需要理一下。細一看,又發現根本就是我們之前學過的東西。控制反轉 ioc 與依賴注入 di 這兩個概念有很多相同的內容,只不過是側重不相同。控制反轉 控制反轉 inversion of control,英文縮寫為ioc 是乙個重要的物件導向程式設計的法則來削減電腦程...

控制反轉 IOC 和依賴注入 DI

控制反 從拆解字面上的意思,控制,是指物件建立 銷毀和管理 單例 的控制權,傳統程式設計上這個是交給呼叫方來控制。反轉,是指這些控制權優傳統上的呼叫方反轉為類似乙個容器的東西,統一調配和管理。依賴注入 依賴,其實就是耦合,這裡更多的是呼叫方和操作物件的耦合。注入是指,將某些耦合關係從乙個東西注入到另...

依賴注入(DI)和控制反轉(IOC)

依賴注入是用於實現控制反轉的最常見的方式之一。依賴注入的思想是 當乙個類對另乙個類有依賴時,不在該類內部對依賴的類進行例項化,而是有乙個配置好了的bean.xml檔案,告訴容器所依賴的類,在例項化該類時,容器自動注入乙個依賴的類的例項。傳統的方法就是在類中先例項化依賴的類,然後再呼叫該類中的方法。p...