Spring Boot error, когда я использую значение свойства внутри перечисления - PullRequest
0 голосов
/ 28 июня 2018

У меня есть проект Spring Boot, и я пытаюсь восстановить значение файла .properties и использовать его внутри перечисления.

Я следую за следующими шагами.

  • У меня есть файл application.properties с value = 000. Я восстановил это значение с:

    @RestController
    public class ReadProperty {
    
        @Value("${value}")
        public String value;
    
        public String getValueProperty() {
            return this.value;
        }
    
        @GetMapping(value = "/get")
        public String getValue() {
            System.out.println("read value is " + value);
            return value;
        }
    
        @GetMapping(value = "/getEnum")
        public String getValueEnum() {
    
            String response = EnumInsideAClass.TEST.toString();
    
            System.out.println("response value is " + response);
            return response;
        }
    }
    

Если я использую значение в классе, я получаю значение 000 без проблем.

  • Я создаю перечисление внутри класса, подобного этому

    public class EnumTest {
    
        @Autowired
        static ReadProperty readProperty;
    
        public final static String VAL = readProperty.getValueProperty();
    
        public enum EnumInsideAClass {
    
            TEST(VAL);
    
            private String value;
    
            private EnumInsideAClass(String value) {
                this.value = value;
            }
    
            @Override
            public String toString() {
                return this.value;
            }
        }
    }
    

Проблема в том, что внутри класса enum мне нужна статическая переменная. Если я использую

@Value("${value}")
public static String value;

Значение меняется на ноль.

Итак, я попытался использовать доступ к значению методом get, но значение по-прежнему равно нулю.

У меня нет идей, что я могу сделать? Возможно ли использование значения свойства внутри перечисления?

Большое спасибо

1 Ответ

0 голосов
/ 28 июня 2018

Проблема, которую вы описываете, не имеет ничего общего с @Value в enum, а скорее связана с вашей попыткой ввести значение свойства в статическую переменную.

Spring позволит вам вводить значения непосредственно в нестатические и не в статических полях. Если вы хотите сделать это в вашем случае, вы можете прокси-инъекцию через метод установки, например:

public static String value;

@Value("${value}")
public void setValue(String someValue) {
    SomeClass.value = someValue;
}

Но я бы посоветовал вам быть в курсе того, что вы делаете. Поскольку это будет неконечное поле , которое также public и static , вам необходимо знать, кому разрешен доступ к нему, а также кому разрешено изменить его значение.

...