原文:https://my.oschina.net/u/1790105/blog/1490098
這兩天遇到SpringBoot攔截器中Bean無法注入問題。下面介紹我的思考過程和解決過程:
1.由於其他bean在service,controller層注入一點問題也沒有,開始根本沒意識到Bean無法注入是在攔截器中無效的問題,一直在查詢註解指定的包在哪裡配置的,然而卻找不到配置,Springboot是用java類的形式載入配置的。在網路的某個角落看到這樣的說法:
SpringBoot專案的Bean裝配預設規則是根據Application類所在的包位置從上往下掃描!
“Application類”是指SpringBoot專案入口類。這個類的位置很關鍵:
如果Application類所在的包為:com.boot.app,則只會掃描com.boot.app包及其所有子包,如果service或dao所在包不在com.boot.app及其子包下,則不會被掃描!
即, 把Application類放到dao、service所在包的上級,com.boot.Application
知道這一點非常關鍵,不知道spring文件裡有沒有給出說明,如果不知道還真是無從解決。
我出問題的類確實在Application類子包下面,看來不是這方面問題。
2.開始意識到只是攔截器上會有這樣的問題,查詢原因應該是:
攔截器執行在自動bean初始化之前導致這個問題的。
那就只是在攔截器中出現該問題了,解決辦法如下:
首先上圖是我的攔截器和要注入的iRedisUtil物件,出問題的就是這個iRedisUtil。
要解決問題是在專案中繼承“WebMvcConfigurerAdapter”類的類中新增攔截器類作為一個Bean,如下:
現在去執行,發現iRedisUtil物件有值了。