无法在静态变量上使用@Value
。
@Value("${some.value}")
static private int someValue;
static public void useValue() {
System.out.println(someValue);
}
当我这样做时,会打印0
。那么什么是这个的好方法?
答案 0 :(得分:10)
Spring在静态字段中注入注释(默认情况下)。
所以你有两个选择:
@Value
注释添加到setter。@Value
答案 1 :(得分:4)
使用这个简单的技巧来实现你想要的东西(比将值注入非静态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();
答案 2 :(得分:0)
要阻止在经常实例化的类中重复注入相同值,使字段非静态,我更喜欢创建一个简单的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();
答案 3 :(得分:0)
以下代码对我有用,
public class MappingUtils {
private static String productTypeList;
@Value("${productType-list}")
public void setProductTypeList(String productTypeList) {
MappingUtils.getProductTypeList = productTypeList;
}
}