首頁 > Java > java教程 > 為什麼在 Spring 中建構函數或 Setter 注入優於字段注入?

為什麼在 Spring 中建構函數或 Setter 注入優於字段注入?

DDD
發布: 2024-12-08 01:54:12
原創
284 人瀏覽過

Why Is Constructor or Setter Injection Preferred Over Field Injection in Spring?

什麼是字段注入以及為什麼通常不首選它

在 Spring MVC 和 Portlet在應用程式中,字段注入是指直接將依賴項注入到帶註釋的字段中的做法使用@Autowired,如以下示例所示:

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

作為替代方案,構造函式註入涉及傳遞依賴作為建構函式中的參數:

@Component
public class MyComponent {
    private final Cart cart;

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

優點和缺點:

建構函式註入有幾個優點:

  • 不變性: 它允許創建不可變對象,因為依賴項是根據實例化。
  • 鬆散耦合:類別對 DI 容器的依賴性較鬆散,可以在其外部使用。
  • 可測試性:物件可以無需反射即可實例化進行單元測試。

Setter 注入也是一種選項,提供一種注入依賴項的機制,該依賴項可能是可選的或隨時間變化的。

相反,字段注入有幾個缺點:

  • 緊密耦合: 它與 DI 容器創建緊密耦合。
  • 不變性: 它阻礙不可變物件的建立。
  • 反射需求:它需要反射才能在 DI 容器之外進行實例化。
  • 隱藏依賴項:真正的依賴項是從介面上被遮蔽。
  • 太多依賴項:它鼓勵添加過多的依賴項,違反了單一職責原則。

注入指南:

Spring 建議遵循以下指南:

  • 使用構造函數注入來實現強制依賴或實現不實作變性。
  • 對可選或可變更的依賴項使用 setter 注入。
  • 在大多數情況下避免場注入。

結論:

考慮到場注入的缺點,通常建議支援建構子或setter注入。場注入的便利性被其潛在的缺點和限制所抵消。

以上是為什麼在 Spring 中建構函數或 Setter 注入優於字段注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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