Java 在枚举内使用属性值时发生Spring启动错误
我有一个Spring启动项目,我正在尝试恢复.properties文件的值,并在枚举中使用它 我遵循下面的步骤Java 在枚举内使用属性值时发生Spring启动错误,java,spring-boot,enums,properties,Java,Spring Boot,Enums,Properties,我有一个Spring启动项目,我正在尝试恢复.properties文件的值,并在枚举中使用它 我遵循下面的步骤 我有一个文件application.properties,其值为000。我通过以下方式恢复该值: @RestController public class ReadProperty { @Value("${value}") public String value; public String getValueProperty() { ret
- 我有一个文件
,其值为application.properties
。我通过以下方式恢复该值: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; } }
- 我在类中创建了一个枚举,如下所示
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;
该值将更改为null
因此,我尝试使用get方法访问该值,但该值仍然为null
我没有主意了,我能做什么?是否可以在枚举内使用属性值
非常感谢您描述的问题与
@Value
位于枚举中无关,而是与您尝试将属性值注入静态变量有关
Spring将允许您直接在非静态和非静态字段中注入值。如果您想在本例中执行此操作,您可以通过setter方法代理注入,例如:
public static String value;
@Value("${value}")
public void setValue(String someValue) {
SomeClass.value = someValue;
}
但我建议你要非常清楚自己在做什么。由于这将是一个非最终字段,它也是公共的和静态的,您需要知道谁可以访问它,谁可以更改它的值。要添加,我不明白为什么您不能将普通枚举映射到属性。“而不是做这种疯狂的事。”达伦·福赛斯,的确如此。我只是给他问题的答案。另外,对我来说,整个@Value
注入虽然在某些情况下很方便,但不是一个好主意。最终,项目中分散着大量的属性,而没有一个公共的分组位置。这就是为什么我更喜欢使用@ConfigurationProperties
将它们组合在一起的属性服务。这样我只要在需要的时候注射就可以了。谢谢你的回复!我重新考虑过去掉枚举的字段,直接从属性中使用它。并通过@ConfigurationProperties恢复属性