代码之家  ›  专栏  ›  技术社区  ›  Marcelo Assis

我的annotation@Value返回null,即使它被使用并调用到组件注释类中

  •  0
  • Marcelo Assis  · 技术社区  · 3 年前

    我想使用应用程序属性而不是硬编码它,但它总是返回null。IntelliJ将它正确地计算为我在文件中设置的值。 其他一切都如我所愿。任何方向都很感激!

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

    @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 回复  |  直到 3 年前
        1
  •  2
  •   chrylis -cautiouslyoptimistic-    3 年前

    在构造实例之前,字段注入不可能发生,因此 @Value (或 @Autowired @价值 改为使用构造函数参数。

        2
  •  0
  •   Zoren Konte    3 年前

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

    @Value("${api.someapiservice.key}")
    private String API_KEY;
    
    @PostConstruct
    public void init() {
        System.out.println(this.API_KEY);
    }