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!
推薦閱讀:
- 基於@PostConstruct註解的使用,解決向靜態變量註入值
- 解決springboot遇到autowire註入為null的問題
- springboot 如何解決static調用service為null
- Spring boot 無法註入service問題
- Spring使用@Autowired註解靜態實例對象方式