文章目錄
- 一、簡介
- 二、@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() 方法;