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



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

但我建议你非常清楚自己在做什么。由于这将是一个非最终字段,也是公共静态的,因此您需要了解谁被允许访问它,以及谁被允许更改它的值。

最新更新