1. 程式人生 > >自定義監聽器bean屬性無法注入問題

自定義監聽器bean屬性無法注入問題

  今天在學習ERP專案的許可權管理功能時,遇到了自定義的監聽器無法注入bean。在監聽器中需要獲取到resEbi這個bean用來查詢需要限制訪問的資源url,並將其放入到servletContext中。以後,直接從中取出即可,不用每次都查詢資料庫。
  後來,我查看了很多的帖子,瞭解到了為什麼會爆出無法找到resEbi這個bean。原來這是由於我是使用註解來注入bean,交由spring管理。但是監聽器、spring、servlet它們的生命週期是不一樣的,這樣就導致了這麼個情況的出現,監聽器已經初始化了,但是spring的bean還沒有注入。因此,就會出現監聽器找不到bean的問題。
  菜鳥也想飛的部落格中指出,註解的方式執行的位置,spring的注入是在filter和listener之後的,(順序是這樣的listener >> filter >> servlet >> spring )。如果如果在監聽器中有需要對容器中bean進行引用,就不能採用註解的方式了。只能手動的進行配置檔案的讀取。
  我後來使用了手動配置後就沒有報錯了,具體配置如下。
  自定義監聽器需要進行下面3個地方的配置
  1.web.xml的配置
  這裡寫圖片描述


  2.applicationContext.xml配置
  這裡寫圖片描述
  3.ResDao的配置
  這裡寫圖片描述
  由於使用註解是不需要提供setter方法的,但是改為自定義配置以後需要新增setter方法,否則報錯。