關於springboot項目中自動注入,但是用的時候值為空的BUG


最近想做一些web項目來填充下業余時間,首先想到了使用springboot框架,畢竟方便 快捷

首先:去這里 http://start.spring.io/ 直接構建了一個springboot初始化的項目框架  

然后:在頁面上選擇相應的依賴包,然后點擊構建按鈕,然后下載並且導入IDE中,目前喜歡使用IDEA

於是一個簡答的springboot項目就搭建好了

廢話說完,然后想體驗下spring中redis的使用;

那就直接新建了一個類,然后 @Autowired 自動注入 RedisTemplate 類,當然在這個類上面是要加上 @Component 注解的。

但是問題來了,在這個類下面創建了一個方法,然后方法里面調用redisTemplate的時候,提示為null,這是為什么呢?

下面是嘗試了各種網上分享的解決方案中認為比較有用的幾種方式:

  1.注解沒有掃描到,問題原因可能是springboot啟動類沒有放到最外層的包的根目錄下面

因為springboot啟動的時候會自動掃描啟動類所在包的所有子包里面包含的注解,如果啟動類放錯了位置,會導致注解掃描不到

具體邏輯,請看 

@SpringBootApplication 注解中包含的 @ComponentScan 這個注解的解析,就是掃描注解的一些邏輯

  2.調用的時候,使用的對象是被new出來的,而不是spring自動注入進來的,沒有被spring來管理,所以當然為null

比如:在類 A里面 注入了 redisTemplate  然后,springboot項目啟動之后在A類里面又創建了一個 main方法,然后在main里面,new A(); 來創建一個A的實例,然后再A.redisTemplate 進行調用,獲取到的就是一個NULL值

 

 

故:解決方式就是 如果想要使用 @Autowired注入一些springboot自動管理的工具的話,比如 redisTemplate  /  jdbcTemplate  等等,要么就是直接在啟動類里面進行注入,不過這樣用的比較少,一般都會新建一個類,然后在里面進行注入,

但是如果想要使用的話需要繼承這個類,然后再子類中進行使用,比如使用redisTemplate  和  jdbcTemplate 的話,就可以創建一個 DataSourceConfig 類,然后自動注入  redisTemplate  和  jdbcTemplate 然后新建兩個方法, getRedisTemplate()  和 getJdbcTemplate()  

里面對應的返回相應的 template ,然后在 dao 中使用的時候就可以直接繼承 DataSourceConfig  ,然后直接使用  getRedisTemplate()    和 getJdbcTemplate()  這兩個方法,來獲取到redis 和jdbcTemplate 進行數據的操作

 

 

以上僅為本人最近遇到的一個比較無語的bug解決之后的備忘,以后勿犯

但是如果剛接觸springboot的話,可能會遇到此類問題,歡迎一起探討

如有幫助到后來人,則功德無量

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM