java - 无法读取一次性 bean 中的 @Value 注释值

标签 java spring

我的类(class)看起来像

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

最佳答案

您正在从构造函数中调用 .init。 Spring 的注入(inject)机制在实际对象构造之后触发,因此构造函数无法获得注入(inject)的成员。

不要直接调用.init,而是在方法上加上@PostConstruct 注解。 Spring会在构建和注入(inject)完成后自动调用。

关于java - 无法读取一次性 bean 中的 @Value 注释值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34732423/

相关文章:

java - volatile 和 synchronized 在一起

java - 具有 Spring MVC 的 Jackson 重复嵌套对象不反序列化

java - java 8中如何将列表值与另一个列表的索引值进行比较?

spring - Controller 的 ModelAndView 或 ResponseEntity 返回类型?

spring - java.net.UnknownHostException Spring ,zuul, Eureka

java - 如何使 Spring Joda-Time 格式化程序在非标准语言环境下工作?

java - @Document 注释中的 MongoDB 和 SpEL 表达式

java - 为什么我的重绘不起作用?

java - org.apache.tiles.TilesException : Attribute 'console' not found

java - 如何使用共享的 Tomcat?