今天在写一个工具类,使用@Value注入配置文件的值,但是一直为空,后来查资料发现@Value对static的属性注入无效。
方法一:
解决办法,其实也挺简单的,就写一个setter方法,在setter方法中注入。当然这个工具类首先得是一个Bean否则是不能被扫描到的,我在这个工具类上加一个组件注解@Component。详细代码如下:
@Component
public class PegsusUtil {
private static String pegsusUserName;
private static String pegsusPwd;
private static String pegsusUserName;
/**
* 从application中获取pegsusUserName,使用这种方法是因为@Value写对static无效,注意需要
* @Component
* @param pegsusUserName
*/
@Value("${pegsusUserName}")
public void setPegsusUserName(String pegsusUserName) {
PegsusUtil.pegsusUserName = pegsusUserName;
}
@Value("${pegsusPwd}")
public void setPegsusPwd(String pegsusPwd) {
PegsusUtil.pegsusPwd = pegsusPwd;
}
/**
*
* @return
*/
public static String getKey(){
String pwdMd5 = DigestUtils.md5Hex(pegsusPwd);
String key = DigestUtils.md5Hex(pegsusUserName+pwdMd5);
return key;
}
方法二:
使用InitializingBean在容器配置文件初始完后就进行赋值
@Component
public class ConstantVodUtils implements InitializingBean {
@Value("${aliyun.vod.file.keyid}")
private String keyid;
@Value("${aliyun.vod.file.keysecret}")
private String keysecret;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
@Override
public void afterPropertiesSet() throws Exception {
ACCESS_KEY_ID = keyid;
ACCESS_KEY_SECRET = keysecret;
}
}
这样就解决了@Value不能注入到static属性中的问题了,简单吧。