IDEA 错误提示之 Could not autowire No beans of 'xxx' type found

1、问题描述

在Idea的spring工程里,经常会遇到 Could not autowire. No beans of 'xxxx' type found 的错误提示。

但程序的编译和运行都是没有问题的,有时候也有可能会报错,无法运行程序,这个错误提示并不会产生影响。但红色的错误提示看起来很不舒服。

2、原因

原因可能有两个,第一个是Intellij IDEA本身工具的问题。第二个便是我们导入@Service包的时候导入包错误造成的

  • 第一种原因,spring auto scan配置,在编辑情况下,无法找不到对应的bean,于是提示找不到对应bean的错误。常见于mybatis的mapper,如下:

    1
    2
    3
    4
    5
    <!-- mapper scanner configurer -->
    <bean id="mapperScannerConfig" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.adu.spring_test.mybatis.dao" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

3、解决方案

  1. Service层

    • @Service导包要导正确:import org.springframework.stereotype.Service,一定不要导阿里巴巴的,否则报错;
    • 在启动类上加 @MapperScan("Mapper/Dao层的包路径") 注解和在 Dao 上加 @Mapper 注解,2选1。import com.alibaba.dubbo.config.annotation.Service;
  2. 降低Autowired检测的级别,将Severity的级别由之前的error改成warning或其它可以忽略的级别。

  3. Mapper/Dao层加上@Mapper然后还有错误提示

    1. @Autowired 改成 @Resource 注解

    2. Mapper/Dao 层的接口上加上 @Repository 注解

    3. @Autowired 写成 @Autowired(required=false)

      • @Autowired(required=true) :默认选项,表示注入的时候,该bean必须存在,否则就会注入失败。
      • @Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。

IDEA 错误提示之 Could not autowire No beans of 'xxx' type found
https://flepeng.github.io/021-Java-71-问题-01-idea-IDEA-错误提示之-Could-not-autowire-No-beans-of-xxx-type-found/
作者
Lepeng
发布于
2021年5月14日
许可协议