今天在我不斷的深入詢問下,AI用來一個很恰當(dāng)?shù)谋扔?,讓我搞懂了什么是依賴注入。就?dāng)于在【所依賴的對象】和【所要實現(xiàn)的對象】之間,加了一個中間層,用來管理所有的依賴。而你只需要和中間層對接即可。
下面是AI給我的解釋:
依賴注入(Dependency Injection, DI)通俗解釋
依賴注入的核心思想是:將對象的依賴關(guān)系從對象內(nèi)部移動到外部,由外部提供依賴。用一個現(xiàn)實世界的例子來解釋:
現(xiàn)實世界例子:點外賣
-
傳統(tǒng)方式(沒有依賴注入):
- 你自己去廚房做飯(自己創(chuàng)建依賴)。
- 你需要知道如何買菜、洗菜、切菜、炒菜(依賴的具體實現(xiàn))。
- 如果你想吃披薩,你必須自己學(xué)會做披薩(依賴的創(chuàng)建和管理都在你內(nèi)部)。
問題:
- 你被綁定在廚房里,無法專注于其他事情(緊耦合)。
- 如果你想換一種食物(如漢堡),你必須重新學(xué)習(xí)如何做漢堡(修改代碼)。
-
依賴注入方式:
- 你點外賣(依賴由外部提供)。
- 你只需要告訴外賣平臺你想吃什么(聲明依賴),外賣平臺會負責(zé)把食物送到你手里(依賴由外部提供)。
- 你不需要知道食物是怎么做的(依賴的具體實現(xiàn)由外部管理)。
優(yōu)點:
- 你可以專注于吃飯,而不是做飯(解耦)。
- 如果你想換一種食物(如從披薩換成漢堡),只需告訴外賣平臺,不需要自己動手(依賴可以動態(tài)替換)。
代碼中的對應(yīng)關(guān)系
-
你:
MyService類。 - 外賣平臺:Spring 容器(或其他依賴注入框架)。
-
食物:
MyRepository依賴。
代碼示例:
public class MyService {
private final MyRepository repository;
// 依賴通過構(gòu)造函數(shù)注入
public MyService(MyRepository repository) {
this.repository = repository; // 外賣平臺把食物送到你手里
}
public void doSomething() {
repository.saveData(); // 你吃飯
}
}
-
依賴注入:Spring 容器負責(zé)創(chuàng)建
MyRepository實例并注入到MyService中(外賣平臺負責(zé)送餐)。 - 你:只需要聲明依賴(告訴外賣平臺你想吃什么),不需要自己創(chuàng)建依賴(不需要自己做飯)。
總結(jié)
依賴注入就像點外賣:
- 你:只需要聲明依賴(告訴外賣平臺你想吃什么)。
- 外賣平臺:負責(zé)提供依賴(把食物送到你手里)。
- 好處:你不需要知道食物是怎么做的(依賴的具體實現(xiàn)由外部管理),可以專注于吃飯(業(yè)務(wù)邏輯)。