SpringBoot通过@Value实现给静态变量注入值详解
一、简介
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;
@PostConstruct
public void init(){
mailName = preMailName;
mailPwd = preMailPwd;
}
}三、总结
- Spring不允许/不支持把值注入到
静态变量中; - Spring的
@Value依赖注入是依赖set()方法; set()方法是普通的对象方法;static变量是类的属性,static没有 set() 方法;
到此这篇关于SpringBoot通过@Value实现给静态变量注入值详解的文章就介绍到这了,更多相关SpringBoot @Value内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
mall整合SpringSecurity及JWT认证授权实战下
这篇文章主要为大家介绍了mall整合SpringSecurity及JWT认证授权实战第二篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-06-06
Java如何获取数组和字符串的长度(length还是length())
这篇文章主要介绍了Java如何获取数组和字符串的长度(length还是length()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-12-12


最新评论