Rumah >Java >javaTutorial >Mengapa @Autowired Beans Null dalam Pembina?
Dalam aplikasi Spring berasaskan Java, kebergantungan @Autowired biasanya disuntik selepas instantiasi kacang. Ini bermakna jika anda merujuk kacang @Autowired dalam pembina, ia akan menjadi batal.
Dalam coretan kod yang disediakan, anda cuba menggunakan kacang @Autowired applicationProperties dalam pembina DocumentManager, tetapi ia pada mulanya mengembalikan null . Ini adalah gelagat yang dijangka kerana kacang @Autowired belum lagi tersedia semasa pembinaan.
Untuk memintas isu ini, pertimbangkan untuk mengalihkan sebarang logik permulaan yang bergantung pada @Autowired beans ke kaedah pasca pembinaan berasingan yang dianotasi dengan @PostConstruct. Kaedah @PostConstruct dilaksanakan selepas instantiasi kacang dan sebelum kacang sedia untuk digunakan.
Dalam kod yang diperbetulkan di bawah, kaedah startOOServer() telah dialihkan ke kaedah @PostConstruct:
@Component public class DocumentManager implements IDocumentManager { private Log logger = LogFactory.getLog(this.getClass()); private OfficeManager officeManager = null; private ConverterService converterService = null; @Autowired private IApplicationProperties applicationProperties; // Constructors may not access @Autowired beans, so move this logic to a @PostConstruct method public DocumentManager() { } @PostConstruct public void startOOServer() { if (applicationProperties != null) { if (applicationProperties.getStartOOServer()) { try { if (this.officeManager == null) { this.officeManager = new DefaultOfficeManagerConfiguration() .buildOfficeManager(); this.officeManager.start(); this.converterService = new ConverterService(this.officeManager); } } catch (Throwable e){ logger.error(e); } } } } public byte[] convert(byte[] inputData, String sourceExtension, String targetExtension) { byte[] result = null; startOOServer(); ... }
Dengan menggunakan kaedah @PostConstruct, kod permulaan kini boleh bergantung dengan selamat pada kebergantungan @Autowired yang tersedia.
Atas ialah kandungan terperinci Mengapa @Autowired Beans Null dalam Pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!