简单分析@Value是否赋值给静态变量
作者:互联网
经常使用@Value复制给成员变量,但是静态变量能复制吗?答案是否定的,不能够生效。
编写一个实例如下:
@RestController
@RequestMapping("/health")
public class HelloController {
@Value("${env}")
private String env;
@Value("${env2}")
private static String env2 = "static";
@RequestMapping("/check")
public String check() {
String s = env + " " + env2;
System.out.println(s);
return s;
}
}
在yaml文件中配置
env : qsm
env2 : qsm2
接下来启动程序,并访问http://localhost:8080/health/check
发现打印的为qsm static
代表对静态变量赋值没有生效。
那么具体原因呢?
类加载过程中,使用类加载器加载java字节码到jvm中,对于静态变量会有准备和初始化2个地方有处理,前置是赋值初始值,后者赋值我们自己定义的值。所以这个时候,静态变量从属于类的。
【重点】:而Spring管理的是【对象】,而不是类。所以Spring是不推荐去赋值给静态变量的。
那么就没有办法赋值了吗?还是有办法的,即使用setter方法上注入,setter方法去掉static
@Value("${env2}")
public void setEnv2(String env2) {
HelloController.env2 = env2;
}
/*
public static void setEnv2(String env2) {
HelloController.env2 = env2;
}
*/
这个时候,再次访问地址,就可以得到qsm qsm2
。此时就代表赋值成功了。
【完,喜欢就点个赞呗】
正在去往BAT的路上修行
标签:String,静态,env2,Value,static,变量,赋值 来源: https://blog.csdn.net/u013541707/article/details/112351878