java:使用@value给工具类中static变量赋值踩坑

场景

从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();
	// 其他逻辑
	...
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值