目錄
案例**如下:
@component
public class helloworld ")
public static string hello_world;
}解決方案一:@value註解加在setter方法上面
@component
public class helloworld ")
public void sethello_world(string hello_world)
}解決方案二:@postconstruct註解
因為@postconstruct註解修飾的方法加在順序在構造方法之後靜態變數賦值之前,所以可以通過該註解解決靜態變數屬性值注入失敗問題:
@component
public classlelots helloworld ")
public static string helloworld;
@postconstruct
public void init()
}業務場景假設:
eg:我需要在乙個類(helloworld)被載入的時候,呼叫service層的介面(userservice)去執行乙個方法(sayhello),有些同學可能會在建構函式中通過呼叫userservice的sayhello()去實現這個需求,但是這會導致一些錯誤異常,請看下面的示例。
錯誤演示**如下:
@component
public class helloworld
}解決方案:@postconstruct註解
由於@postconstruct註解修飾的方法其生命週期位於構造方法呼叫之後,在spring屬性值注入之前,所以,該註解可以很好的解決這個業務需求,**如下:
@component
public class helloworld
@postconstruct
public void init()
}關於這一部分問題,還有一些奇奇怪怪的用法
在建構函式裡使用@value注入的屬性值獲取不到
在配置mqtt連線的時候是在bean初始化的時候就進行連線, 所以要配置連線引數, 當時用的是這樣的方式.
結果執行的時候一直會報nullpointer異常,網上找了很多方案都沒效果, 後來發現 controller裡是可以注入成功的, 那麼說明依賴注入是在建構函式之後進行的. 用以下方式可解決.
還有一點 , @value 屬性是不可以static修飾的,否則也取不到值。
靜態建構函式與靜態變數
靜態建構函式 c 物件初始化1.先變數後建構函式。變數先被初始化 然後建構函式被執行 2.先靜態化後例項化。當 乙個類被訪問時 靜態變數和建構函式最先被初始化 接著是物件的例項化變數和建構函式被初始化 3.先派生類後基類。對於變數和靜態建構函式 派生物件在基物件之前被初始化 比如 c類派生自 b類 ...
靜態變數 靜態屬性 靜態建構函式
靜態屬性不屬於任何例項,也是屬於類的,和靜態變數不同的是,只用在呼叫它的時候,才會初始化,而且每次呼叫都會重新賦值。靜態建構函式需用static修飾,但不能用public或private等關鍵字修飾,因為靜態建構函式不能直接呼叫,無論是直接例項化還是通過class.method的方式。下面我們看看在...
建構函式中的靜態變數
ifndef self sum h define self sum h include unsigned intsum solution1 int n value class sumdefaultconstruct static void reset static unsigned intgetsu...