Spring如何為靜態變數注入值

農碼一生發表於2019-01-19

Spring無法直接給靜態變數注入值,因為靜態變數不屬於物件,只屬於類,也就是說在類被載入位元組碼的時候變數已經初始化了,也就是給該變數分配記憶體了,導致spring忽略靜態變數。所以如下這種寫法就是錯誤的,這樣是無法注入的,在使用該變數的時候會導致空指標錯誤:

@Autowired
private static IOptionService optionService;

Spring依賴注入是依賴set方法,靜態變數不屬於物件,只屬於類。解決方法就是加上非靜態的set方法,如下:

private static IOptionService optionService;

@Autowired
public void setOptionService(IOptionService optionService) {
   Commons.optionService = optionService;
}

相關文章