Spring中 靜態成員變數的注入,以及其他靜態成員變數的單例延遲載入--查漏補缺
Spring對於一個需要自動注入的類,首先應該在類上加入註解:@compone 或者@seveice等等。
由於對於靜態成員變數,直接加@Value("xxxxx")是無法獲取值的,執行時是在其他方法中呼叫為null,我們知道spring自動注入是通過呼叫該類的setter方法注入,因此可以通過新增該成員變數的setter方法,(注意:若用eclipse自動匯入setter功能,出現的setter方法是靜態static的,你需要去除static關鍵字),然後在出現的setter方法上加入@Value("xxxxx"),此時就能獲得自動注入資原始檔設定的值了。
對於單例模式,我們通常定義單例為private static Singlon instance;
通常可以採用以下的雙重檢查的方式:
private static Singlon getInstace() {
if(instance== null){
synchronized ( Singlon.class) {
if(instance == null){
instance= new Singlon();
}
}
}
return instance
}
通過這種延遲載入的方式,我們可以在單例中引入注入的靜態成員變數的值。
若通過"餓漢模式",則無法引用我們自動注入的靜態變數,原因我們也知道,JAVA 類載入機制,載入循序的問題。
專案中遇到的問題,我剛好採用這種方式實現,所以在此處寫一篇博文。一點淺見。