Autowiring von Konstruktoren in Spring Boot
Beim Arbeiten mit Spring Boot kann das Einfügen von Abhängigkeiten in Bean-Konstruktoren mithilfe von Autowiring manchmal zu Nullwerten führen. Dies liegt daran, dass die automatische Verdrahtung nach der Bean-Erstellung erfolgt.
Im angegebenen Codeausschnitt ist die @Autowired applicationProperties-Bean null, wenn sie im DocumentManager-Konstruktor referenziert wird, nicht jedoch, wenn sie in der Konvertierungsmethode referenziert wird. Das Problem besteht darin, dass die automatische Verdrahtung nach der Ausführung des Konstruktors erfolgt.
Lösung: Post-Construction-Initialisierung
Um dieses Problem zu beheben, verwenden Sie das @ PostConstruct-Annotation für eine Methode in der Bean-Klasse, in der die Abhängigkeit initialisiert werden soll. Diese Methode wird nach der Bean-Erstellung aufgerufen und kann verwendet werden, um die erforderliche Initialisierungslogik auszuführen.
So kann die DocumentManager-Klasse geändert werden, um die @PostConstruct-Annotation zu verwenden:
@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; // Remove initialization code from constructor public DocumentManager() { } @PostConstruct public void initialize() { startOOServer(); } ...
Hier Im überarbeiteten Code wurde die Initialisierungslogik in die Initialisierungsmethode verschoben, die mit @PostConstruct annotiert ist. Dadurch wird sichergestellt, dass die ApplicationProperties-Bean verfügbar ist, wenn die Methode nach der Bean-Erstellung aufgerufen wird.
Das obige ist der detaillierte Inhalt vonWarum schlägt Autowiring in Spring-Boot-Konstruktoren fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!