我有一个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
构造函数中传递时,它将为空。
我想我在这里错过了一些明显的东西。
将属性文件中的值注入构造函数的最佳做法是什么?
答案 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;
}
}