IOC和DI有什麼區別?

時間 2021-06-04 16:12:02

1樓:祁達方

《EXPERT ONE ON ONE J2EE DEVELOPMENT WITHOUT EJB》第6章:

IoC主要的實現方式有兩種:依賴查詢,依賴注入。(128頁)

依賴注入是一種更可取的方式。(130頁)

流行的「Martin Fowler將IoC改名為DI」的說法,Martin Fowler的原文在這裡:

Inversion of Control Containers and the Dependency Injection pattern

As a result I think we need a more specific name for this pattern. Inversion of Control is too generic a term, and thus people find it confusing. As a result with a lot of discussion with various IoC advocates we settled on the name Dependency Injection.

大意是已經存在某種模式,該模式被稱為IoC,但IoC太普遍,任何框架都IoC,為了讓表意更明確,決定用DI來精確指稱那個模式。意思大概就是

IoC ioc = the_pattern;

DI di = (DI)ioc;顯然,說the_pattern是IoC或DI都行,多型。但嚴格說IoC.class == DI.

class肯定不為真,兩者還是有區別,是 is-a 的關係。

不過正如不少人把Service和ServiceImpl分開,但Service事實上永遠只有乙個ServiceImpl實現一樣,IoC雖然理論上還有其他實現,但DI過於主流,以至於混用了。

另,以上是剛答的乙個題Spring IoC有什麼好處呢? 的答案的一部分,感興趣可戳去。

2樓:祝坤榮

ioc是目的,di是手段。ioc是指讓生成類的方式由傳統方式(new)反過來,既程式設計師不呼叫new,需要類的時候由框架注入(di),是同一件不同層面的解讀。

和 有什麼區別?

慶悅 異同 相同點 都表示 嘗試 的含義 不同點表示 嘗試了,但是未取得結果 側重目的沒有達到 例子如下我嘗試解決這個問題,但沒有成功 抽菸喝酒不燙頭 嘗試在俄語裡有很多種 1試吃4格也可表達嘗試按時到 2試穿量身 3 努力嘗試 4 竭盡全力try your best in a competitio...

和 有什麼區別?

執筆 用作副助詞,表示 1 聽說,得知 2 表示沒有例外,就連 用作接續詞,表示 1 因為 2 話雖如此,但是 這個句子裡面的 就是表示沒有例外,就連的意思 鍵山怜奈 對於 見 之類表示能力的自發動詞,格主語提示的是東西而不是人,因此在句子中有人作為能力的主體出現時提示助詞是 原句的 馬鹿 和 馬鹿...

和 有什麼區別?

小毛刷 和 有哪些區別呢?的原型是 表示的是一般的規律,日常常規做某事,或者是將來要做的某件事。而 的原型是 表示的是正在做的某事,並帶有持續性。例 明日 散歩 明天去散步 將來做某事 彼 毎日 散歩 他每天在這裡散步 表示常規 A 今何 B 散歩 A 在幹嘛叻?B 在散步呢 正在做的事情 哥布林殺...