In Java-basierten Spring-Anwendungen werden @Autowired-Abhängigkeiten normalerweise nach der Bean-Instanziierung eingefügt. Das heißt, wenn Sie in einem Konstruktor auf eine @Autowired-Bean verweisen, ist diese null.
Im bereitgestellten Codeausschnitt versuchen Sie, die @Autowired applicationProperties-Bean im DocumentManager-Konstruktor zu verwenden, diese gibt jedoch zunächst null zurück . Dies ist das erwartete Verhalten, da @Autowired-Beans während der Konstruktion noch nicht verfügbar sind.
Um dieses Problem zu umgehen, sollten Sie erwägen, jegliche Initialisierungslogik, die von @Autowired-Beans abhängt, in eine separate Post-Konstruktionsmethode zu verschieben, die mit @PostConstruct annotiert ist. Die @PostConstruct-Methode wird nach der Bean-Instanziierung und bevor die Bean einsatzbereit ist, ausgeführt.
Im korrigierten Code unten wurde die startOOServer()-Methode in eine @PostConstruct-Methode verschoben:
@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(); ... }
Durch die Verwendung der @PostConstruct-Methode kann sich der Initialisierungscode jetzt sicher darauf verlassen, dass @Autowired-Abhängigkeiten verfügbar sind.
Das obige ist der detaillierte Inhalt vonWarum sind @Autowired Beans in Konstruktoren Null?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!