У меня есть класс ApiRest, в котором есть член с именем myKey, который я пытаюсь установить из значения, полученного из файла abc.properties. Когда я использую @Value для установки переменной, я получаю следующую ошибку:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ... 'org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 1;
Но если я установлю значение напрямую с помощью private String myKey = "my-Key";, оно будет работать правильно. Мой код выглядит так:
@Path("api/data")
@Controller
@Produces(MediaType.APPLICATION_JSON)
public class ApiRest{
@Value("${my-service.key}")
private String myKey;
private final MyClient myClient = MyClient.builder().key(myKey).build();
//Remaining Code
//I use myClient Object to use one of its method
}
Почему @Value не может ввести значение в переменную и как решить эту проблему?




Вы не можете прочитать значение поля, значение которого вводится постпроцессором Spring bean до того, как оно будет фактически введено.
См. java-документ @Value
Note that actual processing of the @Value annotation is performed by a BeanPostProcessor
Это означает, что вы слишком рано пытаетесь прочитать значение поля myKey:
private final MyClient myClient = MyClient.builder().key(myKey).build();
Вы должны переместить инициализацию поля myClient в другой метод, который сам по себе, например. помечено @PostConstruct
@PostConstruct
public void init() {
this.myClient = MyClient.builder().key(myKey).build();
}
Дальнейшее чтение можно сделать здесь
Пожалуйста, покажите свой конструктор. Из исключения, похоже, есть какая-то проблема