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;
Это потому, что Весна не поддерживает @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; } }
Давайте попробуем разобраться в том, что происходит выше.
Во-первых, НедвижимостьКонтроллер , который является Рестконтроллер , в настоящее время инициализированы весна.
После этого Весна ищет Значение аннотированные поля и методы.
Весна использует инъекция зависимости для заполнения определенного значения при находок @Value аннотация. Однако вместо того, чтобы передать значение переменной экземпляра, оно передается неявному сеттеру. Затем этот сеттер обрабатывает население нашей NAME_STATIC ценность.
4. Заключение
В этом коротком учебнике мы рассмотрели, как внедрить значение из файла свойств в статическую переменную. Это маршрут, который мы можем рассмотреть, когда наши попытки рефакторинга терпят неудачу.
Как всегда, код доступен более на GitHub .