Spring Boot 无法解析某些类型的bean,导致启动报错

embedded/2024/9/24 14:49:03/

一、异常报错

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘bookController’ defined in file [D:\eclipse-workspace\demo\target\classes\com\jsglxx\demo\controller\BookController.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type ‘com.jsglxx.service.BookService’ available: expected at least 1 bean which qualifies as autowire candidate.Dependency annotations: {}

二、异常描述

Parameter 0 of constructor in com.jsglxx.demo.controller.BookController required a bean of type ‘com.jsglxx.service.BookService’ that could not be found.

Consider defining a bean of type ‘com.jsglxx.service.BookService’ in your configuration.

三、异常分析

这个错误信息表明Spring框架在尝试创建名为 bookController 的 bean时遇到了问题。具体问题是无法通过构造函数参数0注入 BookService 类型的bean,因为没有找到符合条件的bean来注入。

该异常通常因以下原因引起:

1. 确认BookService接口的实现类是否存在:

确保有一个实现了 BookService 接口的类,并且这个类被Spring管理。通常,这是通过在实现类上添加 @Service 注解来实现的。

2. 检查组件扫描:

确保Spring的组件扫描能够扫描到 BookService 的实现类。如果使用的是 @SpringBootApplication@ComponentScan 注解,请检查它们的扫描路径是否包含了 BookService 实现类的包。

3. 检查是否有多个候选bean:

如果 BookService 有多个实现,确保使用了 @Primary 注解来指示首选的bean,或者使用 @Qualifier 注解来指定具体使用哪一个bean。

4. 检查类路径:

检查 BookService 是否在启动类 DemoApplication 的同级或下级目录中,如果不是,则会报该异常。

四、异常解决

经检查发现是 BookService 没有在启动类的同级或下级目录
在这里插入图片描述

五、总结

在Spring Boot应用中,@SpringBootApplication 注解是一个组合注解,它包含了 @ComponentScan 注解,后者用于指定Spring在初始化时应该扫描哪些包来查找带有 @Component@Service@Repository 等注解的类,并将这些类注册为Spring容器中的bean。

如果 BookService 的实现类不在启动类的同一级或下级目录中,那么默认情况下,Spring Boot可能无法扫描到这个类,因为它 默认只扫描启动类所在包及其子包中的组件

为了解决这个问题,你可以在 @SpringBootApplication 注解中显式指定 scanBasePackages 属性,来告诉Spring Boot需要扫描哪些包。例如:

java">@SpringBootApplication(scanBasePackages = {"com.jsglxx.service", "其他需要扫描的包"})
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

这样,Spring Boot就会在启动时扫描 com.jsglxx.service 包以及你指定的其他包,从而能够找到 BookService 的实现类并将其注册为bean。


http://www.ppmy.cn/embedded/97890.html

相关文章

LeetCode 第三十一天 2024.8.17

1. :打家劫舍 题目链接: 198. 打家劫舍 - 力扣(LeetCode) 应用条件:动态规划 难点: # 确定dp数组(dp table)以及下标的含义:dp[i]表示在i这房子能投的最高金额 # 确定递推公式: dp…

ansible2

自动化运维工具ansible yum环境与相关安装包的安装 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo yum clean all yum makecache yum -y install epel-release yum -y install ansible ansible --version 编写主…

k8s笔记——资源对象

以下列举的内容都是 Kubernetes 中的对象(Object),这些对象都可以在 YAML 文件中作为一种 API 类型来配置。 PodNodeNamespaceServiceVolumePersistentVolumeDeploymentSecretStatefulSetDaemonSetServiceAccountReplicationControllerRepli…

Webpack高级配置(干货)

​ 前面简单的配置,看webpack5随笔_webpack5白屏-CSDN博客 后续也会重新整理更新 目录 26.提取css成单独文件27.css兼容性处理28.css压缩-变成一行29.sourcemap30.webpack提升打包构建速度31.oneof的用法32.include 和 exclude 的用法33.cache缓存34.多进程打包35.T…

一、什么是 mvvm? MVC、MVP、MVVM三种模式的区别与详解

简介 MVC、MVP、MVVM都是常见的软件架构模式。 MVC(Model-View-Controller)架构模式中,将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller&…

uniapp在线下载安装包更新app

首先用getSystemInfo判断平台、 再通过json文件模拟接口 判断版本号是否一致 不一致则下载服务器apk进行更新 外加网络波动导致失败重新下载更新包 uni.getSystemInfo({success: function (e) {// #ifndef H5// 获取手机系统版本const system e.system.toLowerCase();const pl…

【Linux操作系统】进程控制

目录 一、进程创建1.1 认识fork1.2 写时拷贝 二、进程终止2.1 进程退出2.2 函数退出2.3 exit 三、进程等待四、程序替换 一、进程创建 1.1 认识fork fork函数是系统调用接口,用来创建子进程的 根据进程的pid,可以看出父进程fork后分为父进程和子进程…

探索Witin-NN Tools量化开源项目:模拟神经网络映射映射到存内芯片的计算过程

引言: 在深度学习的世界里,模型的精度和效率往往如同鱼和熊掌,难以兼得。然而,随着技术的进步,量化技术的出现为我们提供了一种平衡二者的解决方案。witin-nn,一个创新的神经网络量化部署工具,…