首頁 > Java > java教程 > 為什麼在 Spring 依賴注入中要避免欄位注入?

為什麼在 Spring 依賴注入中要避免欄位注入?

Linda Hamilton
發布: 2024-12-27 14:28:10
原創
959 人瀏覽過

Why Should Field Injection Be Avoided in Spring Dependency Injection?

欄位注入及其危害

欄位注入(即透過欄位上的 @Autowired 註解注入 Bean)通常不被鼓勵。要描述這一點,請考慮以下內容:

@Component
public class MyComponent {
    @Autowired
    private Cart cart;
}
登入後複製

或者,構造函數注入採用以下方法:

@Component
public class MyComponent {
    private final Cart cart;

    @Autowired
    public MyComponent(Cart cart){
       this.cart = cart;
    }
}
登入後複製

注入技術

那裡主要有以下三個依賴注入方法:

  • 構造函數注入:透過建構函式註入。
  • 方法注入:透過setter或其他方法注入。
  • 欄位注入:使用直接注入到欄位

欄位注入,如第一個範例所示,對應第三個選項。

注入指南

Spring 提倡遵循注射指南:

  • 強制依賴項:利用構造函數注入。
  • 可選或可變更的依賴項:使用setter注入。
  • 避免欄位注入:僅在以下情況下使用它特殊場景。

Field的缺點注入

不鼓勵字段注入有幾個原因:

  • 不可變對象:構造函數注入有助於創建不可變對象,而字段注入則不然
  • 緊密耦合: 緊密的字段注入將類別與DI容器耦合,阻礙其獨立使用。
  • 實例化挑戰:沒有反射和 DI 容器,類別無法實例化,阻礙單元測試能力。
  • 隱藏依賴:字段注入隱藏了依賴,使得很難辨別類對外部的依賴
  • 多重依賴:字段注入可以不受約束地累積依賴。
  • 責任違規:處理多個職責的類別通常會表現出過度的依賴,可能違反單一責任原理。

結論

建構子和setter注入應依需求決定優先順序。由於現場注射的缺點,一般應避免,而方便性是其唯一的優點。

以上是為什麼在 Spring 依賴注入中要避免欄位注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板