Aşağıda, ApplicationProperties bean'ıma başvurduğum ve denediğim bir kod parçacığı gösterilmektedir. Yapıcıdan başvurduğumda boş, ancak başka bir yöntemden başvurulduğunda sorun değil. Şimdiye kadar bu otomatik telli fasulyeyi diğer sınıflarda kullanırken hiçbir sorun yaşamadım. Ama bu, onu başka bir sınıfın kurucusunda ilk kez kullanmaya çalışıyorum.
Aşağıdaki kod parçacığında applicationProperties, yapıcıdan çağrıldığında boştur, ancak dönüştürme yönteminde başvurulduğunda değildir. Neyi kaçırıyorum
@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();
...
Aşağıda ApplicationProperties'den bir pasaj var ...
@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");
}