spring 如何將配置資訊注入靜態變數

2021-09-13 17:09:14 字數 1311 閱讀 7369

我們學習過將配置資訊通過@value()的方法注入到物件的變數中。這是由於物件是由spring統一託管的(保證了單例模式)。那於對於非spring託管的類,如果注入注入資料呢?

比如:我們想把配置資訊的值,注入到類的靜態變數中。

spring.redis.host=test
@component

public class redisserviceimpl implements redisservice ")

static public string host;

@value("$")

static public integer port;

...static public jedispool getjedispool()

}

控制台列印為: "host 未注入

@component

public class redisserviceimpl implements redisservice ")

public void sethost(string host)

@value("$")

public void setport(integer port)

...static public jedispool getjedispool() else

}

控制台正確的列印了注入的值。

spring在啟動時會進行元件掃瞄,打描到redisserviceimpl時,發現其類使用了@component註解。於是,初始化物件redisserviceimpl。初始化過程中,對方法進行掃瞄,當掃瞄到使用@value註解的方法時,呼叫方法,並注入需要注入的值。

然後:我們使用了乙個小的技巧: 在這個自動執行的方法中,將值設定給了類。進而實現了,在啟動時將值注入到類的目標。

其實:spring不對類進行託管,所以也就不可能將值注入到類。所以我們的上述方法,應該描述為:將值注入給方法,然後在方法中,使用傳入的值為類進行資料初始化。

這時,我們也就清楚為什麼使用@value()註解時,無法將值注入的原因了:

如果將@value(),直接加到靜態私有變數上,則在初始化物件時,由於靜態私有變數屬於類,所以spring未對類進行操作 -- 錯誤。

如何將屬性注入到 JPA entity 中

1 定義乙個注入的介面 public inte ce dependencyinjector2 定義乙個實現了注入介面 dependencyinjector 及 beanfactoryaware 的屬性注射器 bean public class autowiredependencyinjector i...

如何檢視Linux的相關配置資訊

如何檢視linux的相關配置資訊 不管是做運維還是dba,在進入乙個linux系統的時候肯定是要了解當前系統的配置情況的,那麼如何檢視呢?總不能把伺服器拆了吧!呵 呵,這裡是有一些命令可以取得的。經過資料搜 索和查詢現總結了如下,以備後查 這裡主要從作業系統型別及版本 cpu 記憶體和硬碟進行說明 ...

lua如何將使用者ip轉為地理位置資訊

有三種方法 第1種 使用 或者其他ip轉換位址,可以轉換,準確,但是請求頻率限制了。第2種 使用lua讀取本地檔案ip庫,這種需要使用二叉樹演算法讀取檔案,獲取位置。速度會有些慢,對伺服器壓力大,準確。第3中 使用第三方ip轉換庫 ip2region 的git位址 ip2region 這個庫暫時不相...