无法读取Disposable bean中的@Value注释值

时间:2016-01-11 22:36:18

标签: java spring

我的班级看起来像

public class LevelDBStore implements DisposableBean {
  @Value("${leveldb.maxOpenFiles:1000}")
  private String maxOpenFilesValue;

 public LevelDBStore(String storeName, long cacheSizeInMb, int maxOpenFiles,DBComparator dbComparator) {
     storeLocation = new File(STORE_HOME, storeName);
     db = init(storeLocation, cacheSizeInMb, maxOpenFiles, dbComparator);
     isValid = true;
}

 private DB init(File storeLocation, long cacheSizeInMb, int maxOpenFiles,
  DBComparator dbComparator) {
    logger.info("MaxOpenFilesValue=" + maxOpenFilesValue);
   }
  .....
}

当这段代码运行时,我得到了

11 Jan 2016 14:33:14,325 [INFO ] [main] LevelDBStore         | MaxOpenFilesValue=null

这里有什么问题?我通常使用其他bean但不使用DisposableBean

2 个答案:

答案 0 :(得分:3)

您正在从构造函数中调用.init。在实际的对象构造之后触发Spring的注入机制,因此构造函数不能提供注入的成员。

不要直接调用.init,而是在方法上添加@PostConstruct注释。 Spring将在施工完成后自动调用它并完成注射。

答案 1 :(得分:2)

在创建对象之后(即,在构造函数完成之后)处理用@Value注释的字段。您在构造函数中调用init方法,因此该字段尚未初始化。

您可以在init方法上使用@PostConstruct注释,然后在对象创建完成后执行该方法。