Spring無法直接給靜態變數注入值,因為靜態變數不屬於物件,只屬於類,也就是說在類被載入位元組碼的時候變數已經初始化了,也就是給該變數分配記憶體了,導致spring忽略靜態變數。所以如下這種寫法就是錯誤的,這樣是無法注入的,在使用該變數的時候會導致空指標錯誤:
@Autowired
private static IOptionService optionService;
Spring依賴注入是依賴set方法,靜態變數不屬於物件,只屬於類。解決方法就是加上非靜態的set方法,如下:
private static IOptionService optionService;
@Autowired
public void setOptionService(IOptionService optionService) {
Commons.optionService = optionService;
}