我正在使用spring,需要一些帮助:我想使用application.properties设置一个api键,而不是硬编码它,但它总是返回null。intellij将它正确地计算为我在文件中设置的值。我已经阅读了这里的其他问题,几乎所有的解决方案都说spring只能“注入”托管类中的那些值变量,比如组件、bean等。我就是这么做的,但仍然得到null!其他一切都如我所愿。任何方向都很感激!
我的应用程序.properties
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'
...
}
使用apiclient的类:
@Component
public class SomeService {
private final SomeRepository someRepository;
private final ApiClient apiClient;
public PlaylistService(SomeRepository someRepository , ApiClient apiClient ) {
this.SomeRepository = SomeRepository;
this.apiClient = ApiClient;
}
2条答案
按热度按时间nsc4cvqm1#
在构造示例之前,字段注入不可能发生,因此
@Value
(或@Autowired
)构造函数中的字段将始终为空。移动@Value
改为使用构造函数参数。7vhp5slm2#
如果您想知道启动时@value字段的值是多少。可以使用@postconstruct注解,也可以在类构造函数上移动@value注解。
或者使用@postconstruct注解