依賴注入(Dependency Injection,DI)是一種設計模式,它通過將對象之間的依賴關系的創(chuàng)建和維護轉移到外部容器中來,以減少對象之間的緊耦合性和提高可重用性。
在傳統(tǒng)的程序設計中,對象通常通過直接創(chuàng)建和維護依賴關系來使用其他對象。這種方法會導致對象之間的緊耦合性,使代碼難以維護和擴展。而依賴注入模式將對象之間的依賴關系的創(chuàng)建和維護轉移到外部容器中,使對象更加松散耦合,并且可以方便地更改依賴項的實現類,而無需修改受影響的對象的代碼。
例如,假設我們有一個需要使用消息服務的應用程序類:
public class MyApplication {
private final MessageService messageService;
public MyApplication() {
// 創(chuàng)建一個 EmailService 實例
messageService = new EmailService();
}
public void sendNotification(String message, String recipient) {
messageService.sendMessage(message, recipient);
}
}
在上面的代碼中,MyApplication 類依賴于 EmailService 類。這種方法導致 MyApplication 類與 EmailService 類緊密耦合,難以進行單元測試,并且難以更改使用的消息服務。
使用依賴注入,我們可以通過將依賴項傳遞到 MyApplication 類的構造函數中來實現解耦:
public class MyApplication {
private final MessageService messageService;
public MyApplication(MessageService messageService) {
this.messageService = messageService;
}
public void sendNotification(String message, String recipient) {
messageService.sendMessage(message, recipient);
}
}
現在,我們可以在創(chuàng)建 MyApplication 實例時傳遞不同的 MessageService 實現類,以更改應用程序使用的消息服務。這樣,我們可以方便地更改依賴項的實現類,而無需修改 MyApplication 類的代碼。