這兩天遇到SpringBoot攔截器中Bean沒法注入問題。下面介紹個人思考過程和解決過程:java
1.因爲其餘bean在service,controller層注入一點問題也沒有,開始根本沒意識到Bean沒法注入是在攔截器中無效的問題,一直在查找註解指定的包在哪裏配置的,然而卻找不到配置,Springboot是用java類的形式加載配置的。在網絡的某個角落看到這樣的說法:spring
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類子包下面,看來不是這方面問題。app
2.開始意識到只是攔截器上會有這樣的問題,查詢緣由應該是:spa
攔截器執行在自動bean初始化以前致使這個問題的。對象
那就只是在攔截器中出現該問題了,解決辦法以下:繼承
首先上圖是個人攔截器和要注入的iRedisUtil對象,出問題的就是這個iRedisUtil。文檔
要解決問題是在項目中繼承「WebMvcConfigurerAdapter」類的類中添加攔截器類做爲一個Bean,以下:io
如今去運行,發現iRedisUtil對象有值了。class