我有一个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。
我没有主意,该怎么办?可能在枚举内使用属性值吗?
非常感谢
答案 0 :(得分:1)
您要描述的问题与@Value
中的enum
无关,而与您尝试将属性值注入静态变量有关。
Spring可让您直接在静态字段上的非静态和非上注入值。如果您要执行此操作,则可以通过设置方法(例如:
)代理注入public static String value;
@Value("${value}")
public void setValue(String someValue) {
SomeClass.value = someValue;
}
但是我建议您非常注意自己在做什么。由于这将是一个非最终字段,它也是公开和静态,因此您需要了解允许访问该字段的人以及还有允许更改其值的人。