A continuación se muestra un fragmento de código en el que intento hacer referencia a mi bean ApplicationProperties. Cuando lo hago referencia desde el constructor, es nulo, pero cuando se hace referencia a él desde otro método está bien. Hasta ahora no he tenido ningún problema al usar este bean autowired en otras clases. Pero esta es la primera vez que intento usarlo en el constructor de otra clase.
En el fragmento de código siguiente, applicationProperties es nulo cuando se llama desde el constructor, pero cuando se hace referencia en el método de conversión no lo es. Qué me estoy perdiendo
@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 continuación se muestra un fragmento de 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");
}
Para que las dependencias se inyecten en el momento de la construcción, debe tener su constructor marcado con la
@Autowired
anotación como tal.fuente