>我有一个 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 方法访问该值,但该值仍然为空。
我没有想法,我该怎么办?可能使用枚举中的属性值吗?
多谢
您描述的问题与enum
中的@Value
无关,而是与您尝试在静态变量上注入属性值有关。
Spring 将允许您直接在非静态字段和非静态字段上注入值。如果您想在您的情况下执行此操作,您可以通过 setter 方法代理注入,例如:
public static String value;
@Value("${value}")
public void setValue(String someValue) {
SomeClass.value = someValue;
}
但我建议你非常清楚自己在做什么。由于这将是一个非最终字段,也是公共和静态的,因此您需要了解谁被允许访问它,以及谁被允许更改它的值。