英文:
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<MyEnum, String>
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("${myapp.token.key:Default value}")
public void setKey(String keyTemp) {
EnumLikeClass.key = keyTemp;
}
}
Now you can call like
EnumLikeClass.key
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论