不能对静态变量使用@Value。
@Value
@Value("${some.value}") static private int someValue; static public void useValue() { System.out.println(someValue); }
当我这样做的时候,0就被打印出来了,那么有什么好的替代方法呢?
0
svdrlsy41#
静态字段中的Spring注入注解(默认)。所以你有两个选择:
ndasle7k2#
使用这个简单的技巧来实现你想要的(比将值注入到非静态setter中并将其写成静态字段要好得多--正如在可接受的答案中所建议的):
@Service public class ConfigUtil { public static ConfigUtil INSTANCE; @Value("${some.value}) private String value; @PostConstruct public void init() { INSTANCE = this; } public String getValue() { return value; } }
使用方式:ConfigUtil.INSTANCE.getValue();
ConfigUtil.INSTANCE.getValue();
guicsvcw3#
为了防止重复注入相同的值,从而使频繁示例化的类中的字段变为非静态,我倾向于创建一个简单的Singleton ConfigUtil作为解决方法:
package de.agitos.app.util; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.beans.factory.annotation.Value; /** * Helper class to get injected configuration values from static methods * * @author Florian Sager * */ @Configurable public class ConfigUtil { private static ConfigUtil instance = new ConfigUtil(); public static ConfigUtil getInstance() { return instance; } private @Value("${my.value1}") Integer value1; public Integer getValue1() { return value1; } }
在类内部,我尝试先将值作为静态Integer注入:
private static Integer value1 = ConfigUtil.getInstance().getValue1();
xmakbtuz4#
以下代码对我有效,
public class MappingUtils { private static String productTypeList; @Value("${productType-list}") public void setProductTypeList(String productTypeList) { MappingUtils.getProductTypeList = productTypeList; } }
wixjitnu5#
假设你有一个叫做config的类名,所以你初始化了这个静态变量。也许你可以用下面的方法来初始化这个变量
class Config { private static int someValue; private Config(@Value("${some.value}") int valueDuringInitialization)//private constructor { Config.someValue=valueDuringInitialization; } static public void useValue() { System.out.println(someValue); } }
5条答案
按热度按时间svdrlsy41#
静态字段中的Spring注入注解(默认)。
所以你有两个选择:
@Value
注解添加到setter。@Value
ndasle7k2#
使用这个简单的技巧来实现你想要的(比将值注入到非静态setter中并将其写成静态字段要好得多--正如在可接受的答案中所建议的):
使用方式:
ConfigUtil.INSTANCE.getValue();
guicsvcw3#
为了防止重复注入相同的值,从而使频繁示例化的类中的字段变为非静态,我倾向于创建一个简单的Singleton ConfigUtil作为解决方法:
在类内部,我尝试先将值作为静态Integer注入:
xmakbtuz4#
以下代码对我有效,
wixjitnu5#
假设你有一个叫做config的类名,所以你初始化了这个静态变量。也许你可以用下面的方法来初始化这个变量