我的注解 @Value return null 即使它被使用并调用到注解的组件中 类

My annotation @Value return null even it being used and called into component annotated classes

我正在使用 Spring,需要一些帮助: 我想使用 application.properties 设置一个 API 键而不是对其进行硬编码,但它总是 returns 为空。 IntelliJ 将其正确评估为我在文件中设置的值。 我已经在这里阅读了其他问题,几乎所有解决方案都说 Spring 只能在托管 类 中“注入”那些值注释,例如组件、Bean 等。这就是(认为)我所做的仍然是空的! 其他一切都按我的预期工作。任何方向表示赞赏!

我的application.properties

api.someapiservice.key=08e...f

Class 使用属性值:

@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'
    ...
}

Class 使用 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;
}

字段注入只有在实例构建完成后才能发生,因此您的 @Value(或 @Autowired)字段在构造函数中将始终为 null。将 @Value 移至构造函数参数。

如果您想知道启动时@Value 字段的值是多少。您可以使用@PostConstruct 注释,或者您可以在class 构造函数上移动@Value 注释。

private String API_KEY;

public ApiClient(@Value("${api.test.value}") String key) {
    this.API_KEY= key;
    System.out.println(this.API_KEY);
}

或使用@PostConstruct注解

@Value("${api.someapiservice.key}")
private String API_KEY;

@PostConstruct
public void init() {
    System.out.println(this.API_KEY);
}