Вопрос проверяет понимание жизненного цикла бинов и механизма внедрения зависимостей в Spring.
Нет, @Value нельзя напрямую использовать для static-полей.
Spring внедряет значения только в экземпляры бинов.static-поля не принадлежат объекту.
Это ограничение архитектуры контейнера.
Есть обходные решения, но они не рекомендуются.
Чтобы понять ограничение, нужно вспомнить, как Spring работает с бинами.
Spring:
создаёт экземпляры бинов
управляет их жизненным циклом
внедряет зависимости в поля объекта
static-поля:
принадлежат классу
не связаны с конкретным экземпляром
Поэтому:
Spring не может корректно внедрить значение
@Component
public class Config {
@Value("${app.timeout}")
public static int TIMEOUT; // не сработает
}
Иногда используют:
@PostConstruct и инициализацию static-поля
конфигурационный бин с геттером
передачу значения через конструктор
Пример корректного подхода:
@Component
public class Config {
private final int timeout;
public Config(@Value("${app.timeout}") int timeout) {
this.timeout = timeout;
}
public int getTimeout() {
return timeout;
}
}
@Value и static несовместимы по дизайну Spring, и лучше проектировать код без static-конфигураций.