關於Spring中初始化一個靜態變數(需要呼叫Service層然後從資料庫查出來的)
阿新 • • 發佈:2019-01-01
想要在專案啟動時初始化一些靜態變數(從資料庫裡查出來的)
首先想到了使用 static{ } 靜態程式碼塊, 但是靜態程式碼塊的執行順序在 @Autowired注入的Service層之前。
也就是說要在靜態程式碼塊中 訪問資料庫, 但是 執行靜態程式碼塊中的程式碼時, @Autowired還沒有注入進來, 會報NullPoint。
網上搜了一些解決辦法, 以下辦法可以解決, 其他的暫時沒有試驗:
private static List<ResourceEntity> resourceList = null; //初始化的全域性靜態變數 @Autowired private ResourceService resourceServiceTemp; private static ResourceService resourceService; //字面上看, 這個註解的意思是在構造方法之後執行(還有個PreConstruct方法) @PostConstruct public void init() { //程式啟動後會自動執行該方法 resourceService = resourceServiceTemp; //將注入的物件重新賦值給靜態物件 resourceList = resourceService.findAll(); //在這裡就可以呼叫Service的方法了 }