@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!