Affectation des beans @Autowired dans le constructeur
Un problème courant rencontré lors de l'utilisation des beans @Autowired est qu'ils peuvent initialement être nuls lorsqu'ils sont référencés dans un constructeur. Cet article explore ce comportement et propose une solution pour y remédier.
Dans l'extrait de code fourni, le bean @Autowired applicationProperties est nul lorsqu'il est accessible dans le constructeur DocumentManager, mais il est correctement initialisé lorsqu'il est référencé dans d'autres méthodes. Cette incohérence est due au cycle de vie de l'initialisation du bean.
Le câblage automatique des beans se produit après la construction de l'objet, ce qui signifie qu'aucune valeur ne leur est encore attribuée lorsque le constructeur est appelé. Pour résoudre ce problème, déplacez la logique d'initialisation vers une méthode distincte annotée avec @PostConstruct. Cette annotation garantit que la méthode est invoquée après l'instanciation du bean et l'injection de dépendances, vous permettant ainsi d'accéder de manière fiable aux beans autocâblés.
Extrait de code révisé
public class DocumentManager implements IDocumentManager { @Autowired private IApplicationProperties applicationProperties; public DocumentManager() { } @PostConstruct public void init() { startOOServer(); } private void startOOServer() { if (applicationProperties != null) { ... } } }
Avec cette modification , le code d'initialisation s'exécutera après la construction de l'objet et garantira que le bean applicationProperties est disponible lorsque cela est requis dans le Gestionnaire de documents.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!