当我在枚举中使用属性值时出现Spring Boot错误

时间:2018-06-27 21:43:11

标签: java spring-boot enums properties

我有一个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;
            }
        }
    }
    

问题是在枚举类内部我需要一个静态变量。如果我使用

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

值更改为空。

因此,我尝试使用get方法访问该值,但该值仍为null。

我没有主意,该怎么办?可能在枚举内使用属性值吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

您要描述的问题与@Value中的enum无关,而与您尝试将属性值注入静态变量有关。

Spring可让您直接在静态字段上的非静态上注入值。如果您要执行此操作,则可以通过设置方法(例如:

)代理注入
public static String value;

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

但是我建议您非常注意自己在做什么。由于这将是一个非最终字段,它也是公开静态,因此您需要了解允许访问该字段的人以及还有允许更改其值的人。