【发布时间】:2017-07-18 17:51:40
【问题描述】:
我有一个 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 构造函数时,它为空。
我想我在这里遗漏了一些明显的东西。
错误是什么?将属性文件中的值注入构造函数的最佳做法是什么?
【问题讨论】:
-
是
@Value("${number.of.books}"),我也不认为你可以这样声明为final。 -
更新了 sn-p,从语法的角度来看,IDE 中的代码是正确的,因为 numberOfBooks 字段是使用属性文件中的值初始化的。构造函数将其读取为 null。
-
我猜是初始化顺序的问题。如果你从字段中删除 static 关键字并在 MyController 中注入 Config 类,它可能会起作用。
-
代码不正确。您正在尝试使用一个不起作用的私有字段,并且您不能声明一个未初始化为 final 的属性
-
@baao 你可以声明一个属性
final,只要它在构造函数中设置。不过,static final没有意义。
标签: java spring spring-mvc spring-boot dependency-injection