在寫專案的時候,寫了乙個工具類或者測試類,然後呼叫相關的service層或者dao層的bean,但是通通為null,為啥呢?
問題原因
兩種情況會導致如此問題,乙個是工具類中的方法為靜態方法,靜態方法呼叫了bean,但是由於spring的載入機制,是載入靜態**-》建構函式-》注入bean-》postconstuct的順序執行,因此靜態方法裡呼叫的bean,並沒有注入相應的bean,因此為空,所以會出現bean為null的情況。
另一種情況是,呼叫工具類的時候,new了乙個工具類的例項,該應用裡的例項都是交給spring ioc容器去看管維護的,現在突然new出來乙個例項,spring ioc容器是沒有去看管他的,所以並不在同乙個上下文中,那麼new出來的這個類裡面的例項方法,當然也呼叫不到spring ioc上下文裡的例項了,所以當你呼叫你new出來的例項的方法時候,該方法裡呼叫的spring的bean,都是沒有注入的物件的。
解決辦法
解決辦法同樣有兩種,針對上面說的第乙個問題的解決辦法是,使用註解@postconstruct的方法,手動注入bean,因為postconstruct的方法,在bean載入完成之後,init之前執行,所以在這個時間點,注入相應的bean物件,就會生效。
第二種方法是,直接把該工具類作為spring的乙個bean元件,使用@component,在業務層呼叫的時候,也同樣使用注入的方式注入該工具類,這樣也可以解決問題了。
Spring框架中注入方式
定義 使用set方法形式為成員變數賦值 語法 將需要的元件宣告為成員變數並提供set方法,在配置檔案中使用property標籤進行賦值8種基本資料型別與string型別的注入 陣列的注入 uuuu wwww zzzz x list的注入 aaaaa bbbbb ddddd map的注入 定義 使用類...
工具類中注入Spring物件
因為日常工作中肯定會使用過到工具類 裡面必然會有靜態方法 但是spring 是無法直接注入靜態方法的 需要一些額外的工作 第一種 宣告為spring元件 component public class utils 第二種 component public class staticutils 因為工具方...
Spring中注入的理解(SSH框架)
1 整個action可以說是web容器的service方法的包裝過的類,是用來處理客戶端傳遞過來的請求的。2 裡面的user只是乙個屬性,引數而已,當客戶端傳送請求過來時,如果將user物件的一些屬性同時傳遞過來,那麼容器將會自動將user例項化。3 service是需要注入,因為,service是...