Listener中使用Spring註解失敗,空指標

2021-09-03 01:16:04 字數 914 閱讀 3077

自己踩坑

在做web專案時,我們有時候需要在專案啟動的時候需要做一些初始化的操作,例如:讀取資料庫資料放入redis快取中,自己就是在這個地方碰到了問題,主要是自己對tomcat容器中的結構不熟悉,當時找了很多資料才解決了。

先看**

public class loaddbtoredislistener extends contextloaderlistener catch (exception e)

}}

一開始我使用了上面的**,但是執行不成功資料存人redis失敗,debug進來發現loadtoredisservice物件是空。翻閱資料發現listener物件的生命週期是由servlet容器管理的,載入的時候servlet容器並不認識@autowired註解,因此造成物件為空,loadtoredisservice物件的宣告週期是由srping容器管理。

解決

public class loaddbtoredislistener extends contextloaderlistener catch (exception e)

}}

但是要注意的一點是該listener初始化時要確保spring中的物件已經載入完成,否則同樣會造成空指標。需要在web.xml檔案中先配置初始化spring容器的listener,然後在配置自己的listener。

最後還要說明:在web server容器中,無論是servlet,filter,還是listener都不是spring容器管理的,因此我們都無法在這些類中直接使用spring註解的方式來注入我們需要的物件。

程序中使用委託(程序中使用程序)

delegate void setlablevisible bool bl 隱藏控制項的委託 設定進度控制項的隱藏顯示 委託 private void setvisible bool bl else this setvisible false 隱藏狀態控制項 當在程序中需要呼叫另外乙個程序的控制項的...

php中使用mysql介紹 PHP中使用MySQL

mysql資料庫的擴充套件 擴充套件庫基本功能相似,用法基本相同,會增加一些新的特性 mysqli擴充套件庫 只能對mysql資料庫操作 pdo擴充套件 可以操作很多態別的資料庫 wamp下修改mysql資料庫密碼 三者在建立連線上的比較 pdo需要四個引數,除了資料庫管理員名稱 密碼 host 還...

C 中使用屬性

使用屬性,避免將資料成員直接暴露給外界 item always use properties instead of accessible data members.學習研究.net的早期,經常碰到一些學習c net的朋友問,要屬性這種華而不實的東西做什麼?後來做專案時也時常接到team裡的人的抱怨反...