Spring 注入static属性值
本文介绍Spring中如何从属性文件给static字段注入值。实际应用中一些工具类中static属性值需读取配置文件,实现该功能可以让工具类提供静态方法更易使用。
1. 问题
首先在属性文件中定义属性:
name = Inject a value to a static field
然后给实例变量注入值,通常在字段上使用@Value注解:
@Value("${name}")
private String name;
但在static字段上应用是,会发现其值为null,注入失败:
@Value("${name}")
private static String NAME_NULL;
这是因为Spring不支持在static字段上使用@Value注解。
2. 解决方案
Spring @Value注解可以在方法上使用,在加载所有Spring配置和bean后,Spring上下文将调用它。方法有多个参数,那么每个参数值都为方法注解对应的值,如果需要参数获取不同的值,可以在参数上增加注解:
@Value("Test")
public void printValues(String s, String v){} //both 's' and 'v' values will be 'Test'
@Value("Test")
public void printValues(String s, @Value("Data") String v){}
// s=Test, v=Data
有了上面的知识,我们可以修改代码为:
public class PropertyUtils {
@Value("${name1}")
private String name;
private static String NAME_STATIC;
@Value("${name2}")
public void setNameStatic(String name){
PropertyController.NAME_STATIC = name;
}
}
这回通过方法成功给static变量NAME_STATIC赋值。
3. 总结
文本介绍了Spring如何从属性文件给static属性注入值,在写一些与配置相关的工具类时常用。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/105425403