从Spring Boot中的属性中注入值

时间:2017-07-18 17:51:41

标签: java spring spring-mvc spring-boot dependency-injection

我有一个Rest Controller,我在其中初始化一个这样的服务:

class Config {
  @Value(${"number.of.books"})
  private final static String numberOfBooks;
}


class MyController  {

 private final Service myService = new ServiceImplementation(Config.numberOfBooks)

 public ResponseEntity methodA() { ... }

}

numberOfBooks字段具有初始值,但是当它在ServiceImplementation构造函数中传递时,它将为空。

我想我在这里错过了一些明显的东西。

将属性文件中的值注入构造函数的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

稍微研究一下后,我发现在调用构造函数之后会发生依赖注入。这就是说使用的方法是在我的服务构造函数上使用Autowired。

class ServiceImplementation implements Service {

private final String numberOfBooks;

@Autowired
private ServiceImplementation(Config config) {
this.numberOfBooks = config.getNumberOfBooks();
}

}

通过这种方式,Spring创建了依赖树,并确保在注入时Config不为null。

答案 1 :(得分:0)

我建议您直接在numberOfBooks中注入ServiceImplementation,如下所示:

public class ServiceImplementation implements Service {

  @Value("${number.of.books}")
  private String numberOfBooks;

}

否则使用setter injection表示静态变量,如下所示:

@Component
class Config {

 public static String numberOfBooks;

 @Value("${number.of.books}")
 public void setNumberOfBooks(String numberOfBooks) {
    numberOfBooks = numberOfBooks;
 }
}