Dans les applications Spring basées sur Java, les dépendances @Autowired sont généralement injectées après l'instanciation du bean. Cela signifie que si vous référencez un bean @Autowired dans un constructeur, il sera nul.
Dans l'extrait de code fourni, vous essayez d'utiliser le bean @Autowired applicationProperties dans le constructeur DocumentManager, mais il renvoie initialement null . Il s'agit d'un comportement attendu car les beans @Autowired ne sont pas encore disponibles pendant la construction.
Pour contourner ce problème, envisagez de déplacer toute logique d'initialisation qui dépend des beans @Autowired vers une méthode de post-construction distincte annotée avec @PostConstruct. La méthode @PostConstruct est exécutée après l'instanciation du bean et avant que le bean soit prêt à être utilisé.
Dans le code corrigé ci-dessous, la méthode startOOServer() a été déplacée vers une méthode @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(); ... }
En utilisant la méthode @PostConstruct, le code d'initialisation peut désormais s'appuyer en toute sécurité sur la disponibilité des dépendances @Autowired.
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!