@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。

推薦閱讀: