Java 기반 Spring 애플리케이션에서 @Autowired 종속성은 일반적으로 Bean 인스턴스화 후에 주입됩니다. 즉, 생성자에서 @Autowired 빈을 참조하면 null이 됩니다.
제공된 코드 조각에서 DocumentManager 생성자에서 @Autowired applicationProperties 빈을 사용하려고 시도하지만 처음에는 null을 반환합니다. . 이는 생성 중에 @Autowired 빈을 아직 사용할 수 없기 때문에 예상되는 동작입니다.
이 문제를 방지하려면 @Autowired 빈에 의존하는 모든 초기화 로직을 @PostConstruct로 주석이 달린 별도의 생성 후 메서드로 이동하는 것을 고려하세요. @PostConstruct 메소드는 Bean 인스턴스화 후 Bean을 사용할 준비가 되기 전에 실행됩니다.
아래 수정된 코드에서 startOOServer() 메소드는 @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(); ... }
@PostConstruct 메서드를 사용하면 이제 초기화 코드에서 @Autowired 종속성을 안전하게 사용할 수 있습니다.
위 내용은 생성자에서 @Autowired Bean이 Null인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!