一個困擾很久的問題(二):Spring容器注入靜態引用,報錯空指針

舉個例子:某Controller

@Resource

private static Service service;

public void test(){

service.findById(1);

}


如上例,將在service.findById(1)報空指針異常。

在網上看了很多解答,都是說spring容器是對象層面的 ,而static修飾的變量是類層面的,所以空指針。個人感覺這種解釋跟沒解釋一樣。

個人分析其加載流程如下:

1.ClassLoad加載類,加載該類時創建service引用,由於並沒有什麼東西注入進來,此時該引用爲null;

2.Spring容器加載,完成;服務器啓動完畢;

3.發生對該Controller的調用,該Controller引用了該service,IOC生產一個service實例,利用set方法注入到該靜態引用中,此時該引用非空;

4.執行service.findById(1)。此時service仍然非空。

但是結果是該service爲空指針。

請大神賜教上述分析哪裏有誤。。

發佈了46 篇原創文章 · 獲贊 31 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章