SpringBoot通過@Value實現給靜態變量註入值詳解

一、簡介

SpringBoot 中給普通變量註入值隻需在變量上添加 @Value 註解即可。

application.properties 配置文件有如下配置:

[email protected]
main.pwd=admin123

給普通變量賦值時,直接在變量聲明之上添加 @Value() 註解即可。

@Value("${mail.name:[email protected]}")
private String mailName;
@Value("${mail.pwd:admin123}")
private String mailPwd;

註:需要在類上添加 @Component 註解。

當要給 靜態變量 註入值的時候,若是在靜態變量聲明之上直接添加@Value() 註解是無效的。

@Value("${mail.name:[email protected]}")
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:[email protected]}")
	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:[email protected]}")
	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內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: