@Autowired註解註入的xxxMapper報錯問題及解決
@Autowired註解註入的xxxMapper報錯
項目場景
Mybatis-Plus測試
問題描述
在Mybatis-Plus場景的測試中發現,通過@Autowired註解註入的userMapper會報錯
這是因為UserMapper 並不是一個可以創建出對象的一個類,而是一個接口。
@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget(); }
解決方案
方案一:
通過添加@Repository註解。
方案二:
在不使用@Repository註解的情況下,可以通過將@Autowired註解改為@Resource註解來實現註入。
分析
因為沒有實現接口所以@Autowired會報錯
1、@Autowired默認按照byType方式進行bean匹配,@Resource默認按照byName方式進行bean匹配
2、@Autowired是Spring的註解,@Resource是J2EE的註解,這個看一下導入註解的時候這兩個註解的包名就一清二楚瞭
Spring屬於第三方的,J2EE是Java自己的東西,因此,建議使用@Resource註解,以減少代碼和Spring之間的耦合。
@Autowired無法加載Mapper,報錯404或者500
當我一直在排錯的時候,尋找註解少添加或者數據庫無法拿到文件的時候,粗心大意蒙蔽瞭我。。
當@Autowired無法加載Mapper,報錯404或者500的時候,要多關註以下幾點
是否包名一致,加載Mapper這個接口的時候,包名是否是一致的
是否在 private XXXMapper xxxmapper;上加入瞭Autowired。如果啟動類無法啟動顯示,必須要加(request = false)
啟動類一定要不要放在java包下,要跟你的com.xxxx這個包下
以上是我個人總結踩坑,希望大傢面對Bug的時候還是要多加細心,多半是因為粗心大意導致,要麼就是沒加註解,要麼就是包名不一致,再或者就是啟動類放在瞭Java包的下面。希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 關於@Autowierd && @Resource 你真的瞭解嗎
- Spring中@Autowired與@Resource的區別詳析
- Java面試題沖刺第十八天–Spring框架3
- 一文搞懂Spring中@Autowired和@Resource的區別
- 深入分析@Resource和@Autowired註解區別