Unten sehen Sie einen Codeausschnitt, in dem ich versuche, auf meine ApplicationProperties-Bean zu verweisen. Wenn ich vom Konstruktor aus darauf verweise, ist es null, aber wenn ich von einer anderen Methode aus darauf verweise, ist es in Ordnung. Bisher hatte ich kein Problem damit, diese automatisch verdrahtete Bean in anderen Klassen zu verwenden. Dies ist jedoch das erste Mal, dass ich versucht habe, es im Konstruktor einer anderen Klasse zu verwenden.
Im folgenden Code-Snippet ist applicationProperties null, wenn es vom Konstruktor aufgerufen wird, aber wenn in der convert-Methode darauf verwiesen wird, ist dies nicht der Fall. Was vermisse ich
@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();
...
Unten finden Sie einen Ausschnitt aus 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");
}
Um Abhängigkeiten zur Konstruktionszeit
@Autowired
einzufügen , muss Ihr Konstruktor wie folgt mit der Annoation markiert sein .quelle