Autowiring Beans dans les constructeurs : comprendre les références nulles
Lorsque vous travaillez avec des POJO gérés par Spring, il est courant d'injecter des dépendances à l'aide de @Autowired annotation. Cependant, certains développeurs rencontrent un problème déroutant où le bean autowired est nul lorsqu'il est accédé dans un constructeur. Cet article vise à clarifier ce comportement et à fournir une solution.
Comme mentionné dans la réponse fournie, le câblage automatique se produit généralement après la construction de l'objet. Cela signifie que toutes les références aux beans autocâblés dans le constructeur seront probablement nulles. Pour résoudre ce problème, il est recommandé de déplacer le code d'initialisation du constructeur vers une méthode distincte annotée avec @PostConstruct.
L'extrait de code modifié suivant illustre cette approche :
@Component public class DocumentManager implements IDocumentManager { @Autowired private IApplicationProperties applicationProperties; // Move initialization code to a PostConstruct method @PostConstruct public void init() { startOOServer(); } private void startOOServer() { if (applicationProperties != null) { // Rest of the initialization code here } } // ... Rest of the class remains the same }
En annotant la méthode init avec @PostConstruct, Spring l'invoquera automatiquement après la construction du bean mais avant qu'il ne soit complètement initialisé. Cela garantit que le bean applicationProperties est disponible pour une utilisation dans la logique d'initialisation.
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!