文章目录
- 一、简介
- 二、@Value给静态变量注入值
- 方案一:set()方法设置
- 方案二:@PostConstruct注解修饰的方法中进行赋值
 
- 三、总结
一、简介
SpringBoot 中给普通变量注入值只需在变量上添加 @Value 注解即可。
application.properties 配置文件有如下配置:
mail.name=admin@163.com
main.pwd=admin123
给普通变量赋值时,直接在变量声明之上添加 @Value() 注解即可。
@Value("${mail.name:admin@163.com}")
private String mailName;@Value("${mail.pwd:admin123}")
private String mailPwd;
注:需要在类上添加 @Component 注解。
当要给 静态变量 注入值的时候,若是在静态变量声明之上直接添加@Value() 注解是无效的。
@Value("${mail.name:admin@163.com}")
private static String mailName;@Value("${mail.pwd:admin123}")
private static String mailPwd;
虽然在编译和运行上没有报错,但是mailName、mailPwd的值都是NULL。
那么如何给静态变量注入值呢?
二、@Value给静态变量注入值
方案一:set()方法设置
@Component
public class MailInfo{public static String mailName;public static String mailPwd;@Value("${mail.name:admin@163.com}")public void setMailName(String name){mailName = name;}@Value("${mail.pwd:admin123}")public void setMailPwd(String pwd){mailPwd = pwd;}
}
注:需要在类上加入 @Component 注解,方法名 setMailName 和参数名 name 可以任意命名。
方案二:@PostConstruct注解修饰的方法中进行赋值
@Component
public class MailInfo{@Value("${mail.name:admin@163.com}")public String preMailName;@Value("${mail.pwd:admin123}")public String preMailPwd;public static String mailName;public static String mailPwd;@PostConstructpublic void init(){mailName = preMailName;mailPwd = preMailPwd;}
}
三、总结
-  Spring不允许/不支持把值注入到 静态变量中;
-  Spring的 @Value依赖注入是依赖set()方法;
-  set()方法是普通的对象方法;
-  static变量是类的属性,static没有 set() 方法;