舉個例子:某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爲空指針。
請大神賜教上述分析哪裏有誤。。