java My annotation@Value返回null,即使它被使用并调用到组件注释类中
我正在使用Spring,需要一些帮助: 我想使用应用程序设置一个API密钥。属性而不是硬编码,但它总是返回null。IntelliJ将其正确计算为我在文件中设置的值。 我已经阅读了这里的其他问题,几乎所有的解决方案都说Spring只能在托管类中“注入”这些值,比如组件、bean等。我就是这么做的,但仍然得到null! 其他一切都按我的计划进行。任何方向都行
我的申请。属性
api.someapiservice.key=08e...f
使用属性值的类:
@Component
public class ApiClient implements ApiClientInterface {
@Value("${api.someapiservice.key}")
private String API_KEY;
public ApiClient () {
System.out.println(API_KEY); //Returns null after spring log info: Initialized JPA EntityManagerFactory for persistence unit 'default'
...
}
使用ApicClient的类:
@Component
public class SomeService {
private final SomeRepository someRepository;
private final ApiClient apiClient;
public PlaylistService(SomeRepository someRepository , ApiClient apiClient ) {
this.SomeRepository = SomeRepository;
this.apiClient = ApiClient;
}
# 1 楼答案
如果你想知道启动时@value字段的值是多少。可以使用@PostConstruct注释,也可以在类构造函数上移动@Value注释
或者使用@PostConstruct注释
# 2 楼答案
在构造实例之前,字段注入不可能发生,因此
@Value
(或@Autowired
)字段在构造函数中始终为空。将@Value
移到构造函数参数