SpringBoot Bean无法注入的问题 org.springframework.beans.factory.NoSuchBeanDefinitionException

整个项目通过Maven构建,大致结构如下:

SpringBoot Bean无法注入的问题 org.springframework.beans.factory.NoSuchBeanDefinitionException_第1张图片

 

 

 

其中在 screenrecord 有一个Application类

package com.zzz.screenrecord;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author wang
 * create on 2020/7/2
 */
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class ScreenRecordApplication {
    public static void main(String[] args) {
        SpringApplication.run(ScreenRecordApplication.class,args);
    }
}

运行之后 总是报错:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.zzz.screenrecord.mapper.ScreenRecordMapper' available: 
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1695) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1253) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]

 

后来经研究发现,SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
“Application类”是指SpringBoot项目入口类。这个类的位置很关键:

如果Application类所在的包为:com.zzz.screenrecord 则只会扫描 com.zzz.screenrecord 包及其所有的子包,如果service或dao不在 com.zzz.screenrecord包下,则不会被扫描。

你可能感兴趣的:(Spring)