Dưới đây là một đoạn mã mà tôi thử và tham khảo bean ApplicationProperties của mình. Khi tôi tham chiếu nó từ phương thức khởi tạo thì nó là null, nhưng khi được tham chiếu từ phương thức khác thì nó tốt. Cho đến bây giờ tôi không gặp vấn đề gì khi sử dụng bean tự động này trong các lớp khác. Nhưng đây là lần đầu tiên tôi cố gắng sử dụng nó trong hàm tạo của một lớp khác.
Trong đoạn mã dưới đây applicationProperties là null khi được gọi từ hàm tạo nhưng khi được tham chiếu trong phương thức convert thì không. Tôi còn thiếu gì
@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();
...
Dưới đây là đoạn mã từ 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");
}