Spring Boot集成Mybatis 常见错误二——NoSuchBeanDefinitionException UnsatisfiedDependencyException

本文详细解析了SpringBoot项目中遇到的NoSuchBeanDefinitionException和UnsatisfiedDependencyException异常,通过调整@ComponentScan注解和pom.xml配置,成功解决了bean未被扫描的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

             NoSuchBeanDefinitionException,报错了,剑客立即马不停蹄的去百度度娘,发现这个问题是没有找到bean类,此时,立即去bean类查看,发现没有问题,而且代码在别人的电脑上也能跑通,此时就立马着手是配置的问题,没有找到是没有扫描的问题。

@SpringBootApplication
//@EnableScheduling //开启定时器
//@EnableCaching //开启缓存
@MapperScan("zzsxt.mapper")

public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

   扫描文件主要是pom.xml的配置和文件配置,bean 无注解,普通扫描,此时小编关注pom.文件,发现配置是这样的

             <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>

只扫描了Java下面的文件,而且只扫了.xml文件,于是度娘告诉剑客,需要加上注解

@SpringBootApplication
//@EnableScheduling //开启定时器
//@EnableCaching //开启缓存
@MapperScan("zzsxt.mapper")
@ComponentScan(basePackages = "zzsxt.beans")
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

运行,哦,果断这个问题解决了,但是又报了个异常,如下:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'UserCardTest': Unsatisfied dependency expressed through field 'userCardService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'zzsxt.service.UserCardService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

这个错误最坑人,说是创建Test测试类是无法创建bean ,搞得我一度怀疑Junit有问题甚至重建项目,后面仔细一读才发现说是service创建失败,所以说,读题很重要,英语很重要,剑客的英语就是有点水啦~~~~

    好的,找到问题,同理和bean实体类的想法一样,也是没扫描到,加入注解,在启动类上

@SpringBootApplication
//@EnableScheduling //开启定时器
//@EnableCaching //开启缓存
@MapperScan("zzsxt.mapper")
@ComponentScan(basePackages = {"zzsxt.beans","zzsxt.service"})
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

执行,OK,啦啦啦问题解决了,那么问题来了没啥在别人的电脑上可以跑通呢,springboot作为轻量级快速开发,注解式开发都是用注解替代配置文件,同样,如果不加注解,可以配置pom.xm文件

<build>
        <plugins>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/webapp</directory>
                <!--注意此次必须要放在此目录下才能被访问到-->
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/**</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/**</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

当然二者选其一,如果不小心两个都写了,一定要注意!!!【springboot是优先扫描注解的,配置注解一定要配置完整,不然还是会报错!!】

 

好了!!这个错误剑客的分享就到这里了,如果你有同样的疑惑,请关注剑客,让剑客与你一起成长!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值