Di bawah ini adalah potongan kode tempat saya mencoba dan mereferensikan kacang ApplicationProperties saya. Ketika saya mereferensikannya dari konstruktor, nilainya null, tetapi ketika direferensikan dari metode lain tidak apa-apa. Sampai saat ini saya tidak memiliki masalah dalam menggunakan kacang autowired ini di kelas lain. Tapi ini pertama kalinya saya mencoba menggunakannya di konstruktor kelas lain.
Dalam potongan kode di bawah applicationProperties bernilai null saat dipanggil dari konstruktor, tetapi saat direferensikan dalam metode convert, nilainya tidak. Apa yang saya lewatkan
@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();
...
Di bawah ini adalah cuplikan dari 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");
}
Agar dependensi diinjeksikan pada waktu konstruksi, Anda perlu memiliki konstruktor ditandai dengan
@Autowired
pengumuman seperti itu.@Autowired public DocumentManager(IApplicationProperties applicationProperties) { this.applicationProperties = applicationProperties; startOOServer(); }
sumber