软件编程
位置:首页>> 软件编程>> java编程>> SpringBoot通过@Value实现给静态变量注入值详解

SpringBoot通过@Value实现给静态变量注入值详解

作者:蹲街式等待  发布时间:2022-04-30 14:30:37 

标签: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() 方法;

来源:https://davis.blog.csdn.net/article/details/125814947

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com