场景
从yml配置文件,获取参数,使用@value给工具类中static变量赋值
问题1
使用@value直接将参数注入到static变量,结果值为null,注入失败
yml配置:
user:
name: tom
注入代码:
@Value("${user.name}")
public static String username;
原因:spring不允许直接给static变量赋值
一种解决方法
借助非static的set方法进行赋值
// 第一步
public static String username;
// 第二步
// 其中String name变量名随意
@Value("${user.name}")
public void setUsername(String name) {
this.username = name
}
问题2
调用将前面注入的静态变量1(或以静态变量1为参数的静态方法)给新的静态变量2赋值,静态变量1的值为null
注入代码:
// 第一步
public static String userName;
// 第二步
// 其中String name变量名随意
@Value("${user.name}")
public void setUserName(String name) {
this.userName= name
}
// 引用username,给新的静态变量userEmail 赋值
// 其中userName值为null
public static String userEmail = userName + "@163.com";
// 引用以username为参数的静态方法createEmail,给新静态变量userEmail2赋值
// 其中静态方法中userName值为null
public static String userEmail2 = createEmail();
// 静态方法:以username为参数
public static String createEmail() {
return userName + "@163.com";
}
一种解决方法
静态变量赋值时,不要引用1.其他静态变量或2.以静态变量为参数的静态方法
// 第一步
public static String userName;
// 第二步
// 其中String name变量名随意
@Value("${user.name}")
public void setUserName(String name) {
this.userName= name
}
// 引用username,给新的静态变量userEmail 赋值
// 其中userName值为null
// public static String userEmail = userName + "@163.com";
// 引用以username为参数的静态方法createEmail,给新静态变量userEmail2赋值
// 其中静态方法中userName值为null
// public static String userEmail2 = createEmail();
// 静态方法:以username为参数
public static String createEmail() {
return userName + "@163.com";
}
// 其他静态方法
public static String Test() {
// 变量初始化
String userEmail = createEmail();
// 其他逻辑
...
}