SpringBoot;我们可以在Java枚举中使用@Value吗?

huangapple go评论74阅读模式
英文:

SpringBoot; Can we use @Value in Java Enums

问题

以下是翻译好的内容:

在枚举类中是否可以使用 @Value("${myapp.token.key}")?

在枚举类中使用 @Configuration 或 @ConfigurationProperties 是一种好的实践吗?

-- JK

英文:

Is it possible to use @Value("${myapp.token.key}") in an Enum class?

Is it a good practice to use @Configuration or @ConfigurationProperties in an Enum class?

-- JK

答案1

得分: 4

不,不是这样的。枚举的目的是为我们提供具有有限范围的映射数据(固定值集合)。如果我们在 Java 枚举中使用 @Value,那么它将首先削弱枚举的目的。

对于 @Configuration 也是一样的,我们在想要在 Spring 的容器中注入实例时使用它。对于枚举来说,这毫无意义。

如果您发布了您尝试这样做的实际原因,我们也许可以为您指引正确的方向/解决方案。

英文:

No, it's not. The purpose for an Enum is to give us mapped data (fixed set of values) with limited scope. If we would to use @Value in Java enums, it would take the purpose of the enum away in the first place.

The same goes for @Configuration, we do that when we want to inject instances in Spring's container. That doesn't make any sense for enums.

If you post the actual reason for why you were trying to do that, we may be able to point you in the correct direction / solution.

答案2

得分: 1

这是可能的,但并不容易,而且绝对不是一个好主意。最好选择一个实现了与 Function<MyEnum, String> 相当的接口的服务。

英文:

It's possible, but it's not easy and definitely not a good idea. Prefer a service that implements an interface equivalent to Function&lt;MyEnum, String&gt; instead.

答案3

得分: 1

你可以创建一个带有静态字段和默认值的类,如下所示:

class EnumLikeClass {

  public static String key;

  @Value("${myapp.token.key:Default value}")
  public void setKey(String keyTemp) {
    EnumLikeClass.key = keyTemp;
  }

}

现在你可以这样调用:

EnumLikeClass.key
英文:

You can create a class with static fields and default values like bellow

class EnumLikeClass {

  public static String key;

  @Value(&quot;${myapp.token.key:Default value}&quot;)
  public void setKey(String keyTemp) {
    EnumLikeClass.key = keyTemp;
  }

}

Now you can call like

EnumLikeClass.key

huangapple
  • 本文由 发表于 2020年9月18日 07:47:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/63947478.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定