静态函数中 @Value 注释的替代方案
无法在静态变量上使用@Value
。
@Value("${some.value}")
static private int someValue;
static public void useValue() {
System.out.println(someValue);
}
当我这样做时,会打印 0
。那么有什么好的替代方案呢?
It's not possible to use @Value
on a static variable.
@Value("${some.value}")
static private int someValue;
static public void useValue() {
System.out.println(someValue);
}
When I do this, 0
is printed. So what is a good alternative to this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
Spring 在静态字段中注入注释(默认情况下)。
因此,您有两种选择:(
@Value
注释添加到 setter。@Value
Spring inject noting in static field (by default).
So you have two alternatives:
@Value
annotation to the setter.@Value
too使用这个简单的技巧来实现你想要的(比将值注入非静态设置器并编写静态字段更好 - 正如接受的答案中所建议的):
使用如下:
ConfigUtil.INSTANCE.getValue() ;
Use this simple trick to achieve what you want (way better than having the value injected into non-static setters and writing so a static field - as suggested in the accepted answer):
Use like:
ConfigUtil.INSTANCE.getValue();
为了防止在经常实例化的类中重复注入相同的值,使字段成为非静态,我更喜欢创建一个简单的 Singleton ConfigUtil 作为解决方法:
在我尝试注入的类中首先将值作为静态整数:
To prevent ever repeating injections of the same value making a field non-static in a class that gets instantiated very often, I preferred to create a simple Singleton ConfigUtil as a workaround:
Inside the class I tried to inject the value first as a static Integer:
以下代码对我有用,
The following codes work for me,
假设您有一个名为 config 的类
所以你初始化静态变量。
可能可以使用以下方法来实现相同的目的
let's say you have a class name called config
so you initialize the static variable.
May be one can use the below approach for the same
这可行,但您必须将类注释为服务、控制器或其他东西。
This works, but you have to annotate the class as a Service, Controller, or something.