gpt4 book ai didi

java - @Autowired bean 在另一个 bean 的构造函数中引用时为空

转载 作者:IT老高 更新时间:2023-10-28 11:39:53 26 4
gpt4 key购买 nike

下面显示的是我尝试引用我的 ApplicationProperties bean 的代码片段。当我从构造函数引用它时它是空的,但是当从另一个方法引用它时它很好。到目前为止,我在其他类中使用这个 Autowiring 的 bean 没有问题。但这是我第一次尝试在另一个类的构造函数中使用它。

在下面的代码片段中,applicationProperties 在从构造函数调用时为 null,但在 convert 方法中引用时则不是。我错过了什么

@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;


// If I try and use the Autowired applicationProperties bean in the constructor
// it is null ?

public DocumentManager() {
startOOServer();
}

private 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();
...

下面是来自 ApplicationProperties 的片段 ...

@Component
public class ApplicationProperties implements IApplicationProperties {

/* Use the appProperties bean defined in WEB-INF/applicationContext.xml
* which in turn uses resources/server.properties
*/
@Resource(name="appProperties")
private Properties appProperties;

public Boolean getStartOOServer() {
String val = appProperties.getProperty("startOOServer", "false");
if( val == null ) return false;
val = val.trim();
return val.equalsIgnoreCase("true") || val.equalsIgnoreCase("on") || val.equalsIgnoreCase("yes");
}

最佳答案

Autowiring (来自沙丘评论的链接)发生在对象构造之后。因此,在构造函数完成之前不会设置它们。

如果您需要运行一些初始化代码,您应该能够将构造函数中的代码拉入一个方法中,并使用 @PostConstruct 注释该方法.

关于java - @Autowired bean 在另一个 bean 的构造函数中引用时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com