依賴注入(Dependency Injection, DI),這裡要先聲明,依賴注入不是Spring Boot專有,它是一種設計模式。那麼,這種設計模式的意義、目的到底是什麼呢?簡單來說就是2個字,解耦。用來降低物件與物件之間的耦合性。
依賴注入按照字面意義應有 依賴 & 注入 兩種行為,接下來讓我分別介紹他們的概念
依賴(Dependency)
在程式開發中,我們很常會遇到物件間相依的情況,舉例如下:
我有一個service主要功能是用來查詢和更新銀行帳戶的餘額,此service主要只負責處理業務邏輯,不負責與資料庫溝通。如果它需要知道某個帳戶目前的餘額則需要仰賴repository溝通&操作資料庫。
@Service("TransactionService")
public class TransactionService{
private AccountRepository accountRepository;
public TransactionService(AccountRepository accountRepository){
this.accountRepository = accountRepository;
}
public void queryAccountAmount(Long accountId) {
BigDecimal currentBalance = accountRepository.getAccountBalance(accountId);
}
public void updateAccountAmount(Long accountId, BigDecimal amount) {
BigDecimal currentBalance = accountRepository.getAccountBalance(accountId);
BigDecimal newBalance = currentBalance.add(amount);
accountRepository.updateAccountBalance(accountId, newBalance);
}
}
由此可知,TransactionService依賴AccountRepository。AccountRepository只負責執行資料庫的操作,不依賴TransactionService
業務邏輯層依賴資料存取層,這種依賴關係是很常見的。