idea中Mapper接口通过@Autowired注入,报错

一、问题

在使用mybatis-plus进行开发时,dao层(BookDao接口)使用@Mapper注解,spring将动态的生成Bean后注入到Servicelmpl中。
但是在Test测试类中使用@Autowired自动注入出现报错:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;

    @Test
    void testGetById() {
        System.out.println(bookDao.selectById(2));
    }
}

private BookDao bookDao;报错内容Could not autowire.No beans of 'BookDao'type found.

二、解决方法:

1、将@Autowired改为@Resource

原因(spring中注解@Resource 与@Autowire 区别):

  • @Autowired按byType自动注入。

  • @Resource默认按byName自动注入。

    • 但是@Resource有两个属性是比较重要的,分是name和type;
    • 如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略;
  • @Autowired是spring自己定义的注解,@Resource是J2EE的,由JSR-250规范定义。

2、IDEA将Severity的级别由之前的error改成warning。

Mapper接口通过@Autowired注入,在编辑情况下,无法找不到对应的bean,于是提示找不到对应bean的错误。

但实际上项目是正常运行的。

可在File -- Settings -- Inspections。在Spring Core -- Autowring for Bean Class 中,

将Severity的级别由之前的error改成warning。

posted @ 2022-07-24 23:45  cloudguest  阅读(801)  评论(0编辑  收藏  举报