SpringBoot中靜態(tài)變量注入方案,一網打盡
前言
Hi,大家好,我是麥洛,昨天同事來找我。說自己想使用@Value注解來注入值,但是發(fā)現(xiàn)注入不進去,想讓我?guī)兔纯?。研究了一?最后發(fā)現(xiàn)是@Value注解無法注入靜態(tài)變量。下面我們一起來回顧一下本次的bug。
普通變量
首先我們來看看。如何給普通變量注入值?
例如,application-dev.yml 配置文件有如下配置:
給普通變量賦值時,直接在變量聲明之上添加@Value()注解即可,如下所示:
這個大家應該很熟悉了,這里就不再贅述。
靜態(tài)變量
我們來看看昨天的問題,我們想給項目中的文件上傳封裝一個工具類。阿里云oss的相關信息我們配置在配置文件中,需要將信息注入到工具類中的變量。為了方便直接使用變量,我們把把變量定義為靜態(tài)變量。當要給靜態(tài)變量注入值的時候,若是在靜態(tài)變量聲明之上直接添加@Value()注解是無效的。如下圖所示。
解決方案
方案一
若要給靜態(tài)變量賦值,可以使用set()方法注入。
- 類上加入@Component注解
- @Value注解標記set方法
- 方法名(例如setOssUrl)和參數(shù)名(例如ossUrl)可以任意命名
如下所示:
方案二
如果你覺得@value注解麻煩??梢允褂聾ConfigurationProperties注解代替,這樣比較簡潔
- 前綴要寫合適
- 方法名(例如setOssUrl)必須和屬性保持一致,例如寫為setUrl()會注入失敗
- 類上加入@Component注解
方案三
- 類上加入@Component注解
- @PostConstruct注解修飾的方法中進行賦值操作
使用場景
那么問題來啦!我們什么場景下需要把值注入到靜態(tài)變量?
場景一
場景二
工具類中將值注入靜態(tài)變量,就可以直接在靜態(tài)方法之中使用,我本文中遇到的正是這個場景
總結
本文中,我們從一個實際問題出發(fā),探尋了三種在springboot中靜態(tài)變量注入方案,希望對大家有所幫助。
本文轉載自微信公眾號「愛寫B(tài)ug的麥洛」