«1. Обзор
В этом руководстве мы увидим, как мы можем ввести значение из файла свойств Java в статическое поле с помощью Spring.
2. Проблема
Для начала давайте представим, что мы установили свойство в файл свойств:
name = Inject a value to a static field
После этого мы хотим внедрить его значение в переменную экземпляра.
Обычно это можно сделать, используя аннотацию @Value для поля экземпляра:
@Value("${name}")
private String name;
Однако, когда мы попытаемся применить ее к статическому полю, мы обнаружим, что оно по-прежнему будет пустым: ~ ~~
@Value("${name}")
private static String NAME_NULL;
Это потому, что Spring не поддерживает @Value для статических полей.
Теперь, по правде говоря, это странное положение для нашего кода, и мы должны сначала подумать о рефакторинге. Но давайте посмотрим, как мы можем заставить это работать.
3. Решение
Во-первых, давайте объявим статическую переменную, которую мы хотим внедрить, NAME_STATIC.
После этого мы создадим метод установки с именем setNameStatic и аннотируем его аннотацией @Value:
@RestController
public class PropertyController {
@Value("${name}")
private String name;
private static String NAME_STATIC;
@Value("${name}")
public void setNameStatic(String name){
PropertyController.NAME_STATIC = name;
}
}
Давайте попробуем разобраться в том, что происходит выше.
Во-первых, PropertyController, который является RestController, инициализируется Spring.
После этого Spring ищет аннотированные поля и методы Value.
Spring использует внедрение зависимостей для заполнения определенного значения, когда находит аннотацию @Value. Однако вместо передачи значения переменной экземпляра оно передается неявному установщику. Затем этот установщик обрабатывает заполнение нашего значения NAME_STATIC.
4. Заключение
В этом кратком руководстве мы рассмотрели, как внедрить значение из файла свойств в статическую переменную. Это путь, который мы можем рассмотреть, когда наши попытки рефакторинга потерпят неудачу.
Как всегда, код доступен на GitHub.