1. 程式人生 > >關於Spring中初始化一個靜態變數(需要呼叫Service層然後從資料庫查出來的)

關於Spring中初始化一個靜態變數(需要呼叫Service層然後從資料庫查出來的)

想要在專案啟動時初始化一些靜態變數(從資料庫裡查出來的)

首先想到了使用 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的方法了
        }