SpringBoot通过@Value实现给静态变量注入值详解
作者:蹲街式等待
这篇文章主要介绍了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!