Rumah  >  Artikel  >  Java  >  Mengapa kacang @Autowired saya null dalam pembina tetapi tidak dalam kaedah lain?

Mengapa kacang @Autowired saya null dalam pembina tetapi tidak dalam kaedah lain?

Linda Hamilton
Linda Hamiltonasal
2024-11-19 02:02:02789semak imbas

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

@Autowired Bean Assignment in Constructor

Isu biasa yang dihadapi semasa menggunakan @Autowired beans ialah ia mungkin pada mulanya menjadi batal apabila dirujuk dalam pembina. Artikel ini meneroka gelagat ini dan menyediakan penyelesaian untuk menanganinya.

Dalam coretan kod yang disediakan, @Autowired bean applicationProperties adalah batal apabila diakses dalam pembina DocumentManager, tetapi ia dimulakan dengan betul apabila dirujuk dalam kaedah lain. Ketidakkonsistenan ini timbul disebabkan oleh kitaran hayat pemulaan kacang.

Pendawaian automatik kacang berlaku selepas pembinaan objek, bermakna ia belum diberikan nilai apabila pembina dipanggil. Untuk menyelesaikan masalah ini, alihkan logik permulaan kepada kaedah berasingan yang diberi penjelasan dengan @PostConstruct. Anotasi ini memastikan bahawa kaedah digunakan selepas instantiasi kacang dan suntikan kebergantungan, membolehkan anda mengakses kacang berwayar automatik dengan pasti.

Snippet Kod Disemak

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

  public DocumentManager() {
  }

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

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

Dengan pengubahsuaian ini , kod permulaan akan dijalankan selepas pembinaan objek dan memastikan kacang applicationProperties tersedia apabila diperlukan dalam DocumentManager.

Atas ialah kandungan terperinci Mengapa kacang @Autowired saya null dalam pembina tetapi tidak dalam kaedah lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn