Spring 靜態變數 建構函式注入失敗的解決方案

2022-09-25 01:12:06 字數 1234 閱讀 9159

目錄

案例**如下:

@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...