IDEA提示找不到Mapper接口:Could not autowire.No beans of 'xxxMapper' type found

前言

相信大多數互聯網公司的持久層框架都是使用 Mybatis 框架,而你們在 Service 層引入本身編寫的 Mapper 接口時應該會遇到下面的狀況:
在這裏插入圖片描述
咱們能夠看到,上面的紅色警告在提示咱們,找不到 xxxMaper 這個類型的 bean。java

爲啥呢?

由於 @Mapper 這個註解是 Mybatis 提供的,而 @Autowried 註解是 Spring 提供的,IDEA能理解 Spring 的上下文,可是卻和 Mybatis 關聯不上。並且咱們能夠根據 @Autowried 源碼看到,默認狀況下,@Autowried 要求依賴對象必須存在,那麼此時 IDEA 只能給個紅色警告了。redis

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {

    /**
     * Declares whether the annotated dependency is required.
     * <p>Defaults to {@code true}.
     */
    boolean required() default true;

}

怎麼解決?

雖然 IDEA 給了個紅色警告,可是程序自己是沒問題的,能夠正常運行。但是代碼裏頭有紅色警告是至關的顯眼的,不曉得狀況的人還覺得我麼你的代碼有問題呢?spring

下面我將會列出實踐過的解決方案。
一、簡單粗暴

直接關掉IDEA的警告提示,是否是很簡單?是否是很粗暴?app

二、麻煩粗暴,給@Autowried註解設置required=false
@Autowired(required = false)
private CarUserMapper carUserMapper;

這樣就不會警告了。由於此時 @Autowried 不會再去校驗 Mapper 接口是否爲空。
缺點:每引入一個Mapper接口都須要設置上required=false,至關的麻煩,並且容易給別人形成誤解:這個Mapper接口真的不需必定存在。框架

三、@Autowried替換爲@Resource
@Resource
private CarUserMapper carUserMapper;

此時也不會給紅色警告了。@Resource 註解是 J2EE 提供的,而 @Autowried 註解是 Spring 提供的,他們若是感興趣能夠去看一下他們的區別。函數

四、在Mapper接口上加@Component
@Mapper
@Component
public inteface CarUserMapper{}

加這個註解呢,主要是爲了讓欺騙IEDA,讓它覺得CarUserMapper也是一個Spring管理的Bean,這樣子使用@Autowired註解注入也不會報錯了。單元測試

五、使用構造函數注入(Spring4.x推薦)

相信你們都有使用Lombok這個神器了,咱們能夠利用他的註解@RequiredArgsConstructor來直接構建構造函數便可,不過我嘗試過單單使用@AllArgsConstructor也是沒問題的。
固然了,你們若是注入的依賴比較少或者閒得蛋疼,仍是能夠本身來寫構造函數的。測試

@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
//@AllArgsConstructor
public class ChargeServiceImpl implements ChargeService {

    private final RedisTemplate<String, Object> redisTemplate;
    private final CarUserMapper carUserMapper;
    private final ChargingMapper chargingMapper;
}

爲何Spring4.x以後就推薦使用構造函數注入呢?你們能夠看看一篇文章:
Why field injection is evil
簡單點總結一下就是:可使依賴不可變、實例化時,會檢查構造函數的參數是否爲空、方便單元測試等等。ui

相關文章
相關標籤/搜索