首頁  >  文章  >  Java  >  為什麼我的 @Autowired bean 在建構函式中為 null 而在其他方法中卻不是?

為什麼我的 @Autowired bean 在建構函式中為 null 而在其他方法中卻不是?

Linda Hamilton
Linda Hamilton原創
2024-11-19 02:02:02790瀏覽

Why is my @Autowired bean null in the constructor but not in other methods?

構造函數中的 @Autowired Bean 賦值

使用 @Autowired beans 時遇到的一個常見問題是,當在構造函數。本文探討了此行為並提供了解決方案。

在提供的程式碼片段中,@Autowired bean applicationProperties 在 DocumentManager 建構函式中存取時為 null,但在其他方法中引用時它已正確初始化。這種不一致是由於 bean 初始化的生命週期所造成的。

bean 的自動組裝發生在物件構造之後,這意味著在呼叫建構函式時尚未為它們賦值。若要解決此問題,請將初始化邏輯移至以 @PostConstruct 註解的單獨方法。此註解可確保在 bean 實例化和依賴注入之後呼叫該方法,從而使您能夠可靠地存取自動組裝的 bean。

修訂的程式碼片段

public class DocumentManager implements IDocumentManager {
  @Autowired
  private IApplicationProperties applicationProperties;

  public DocumentManager() {
  }

  @PostConstruct
  public void init() {
    startOOServer();
  }

  private void startOOServer() {
    if (applicationProperties != null) {
      ...
    }
  }
}

進行此修改,初始化程式碼將在物件建構之後運行,並確保 applicationProperties bean 在需要時可用文件管理器。

以上是為什麼我的 @Autowired bean 在建構函式中為 null 而在其他方法中卻不是?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn