解决@Autowired报错Could not autowire. No beans of ‘XXX‘ type found问题
背景
IDEA中使用@Autowired
报错
Could not autowire. No beans of 'XXX' type found.
错误大致意思为:
没有匹配到类型为XXX的bean。
原因
个人觉得,注入controller
的service
虽然一般来说我们都是注入一个接口,但是该接口有实现类,并且使用@Service
进行关联,所以注入类型应该也可以视为一个类,但是mybatis
仅需提供Dao
接口,也就是说,注入service
的dao
只是一个接口,而没有实现类,虽然mybatis
能够通过Dao接口和xml文件实现与数据库的操作,但是@Autowired
并没有这个识别功能,可能它就认为你类型不匹配,无法使用通过类型注入的方法。
解决方法
- 在相应
mapper
中加上@Component
注解 - 检查
service
层有没有加入@service
注解,若无则加上 - 使用
@resource
注解代替@Autowired
注解 @Autowired(required = false)
设置required
属性值为false
,错误提示消失。- 在相应的
dao
层加入@Repository
注解
@Autowired和@Resource的区别
@Resource
和@Autowired
注解都是用来实现依赖注入的。只是@AutoWried
按by type
自动注入,而@Resource
默认按byName
自动注入。@AutoWried
基于spring
的注解org.springframework.beans.factory.annotation.Autowired
,它默认是按类型进行的装配的。任何给定bean
类只有一个构造函数(最大值)可以声明这个注释,并将'required'
参数设置为true,表示构造函数在用作Spring bean
时要自动装配。如果多个非必需构造函数声明了注释,则它们将被视为自动装配的候选者。将选择具有最大数量的依赖项的构造函数,这些构造函数可以通过匹配Spring
容器中的bean
来满足。如果不能满足任何候选者,则将使用主要/默认构造函数(如果存在)。如果一个类只声明一个构造函数开头,它将始终被使用,即使没有注释。带注释的构造函数不必是公共的。- @
Resource
是基于j2ee
的注解(可以减少了与spring
的耦合)(JDK1.6
以上支持)默认是按名字进行注解。注释标记应用程序所需的资源。此注释可以应用于应用程序组件类,或者该组件类的字段或方法。如果将该注释应用于一个字段或方法,那么初始化应用程序组件时容器将把所请求资源的一个实例注入其中。如果将该注释应用于组件类,则该注释将声明一个应用程序在运行时将查找的资源。即使此注释没有被标记为Inherited
,部署工具仍然需要检查任意组件类的所有超类,以发现这些超类中所有使用此注释的地方。所有此类注释实例都指定了应用程序组件所需的资源。注意,此注释可能出现在超类的private
字段和方法上;在这种情况下容器也需要执行注入操作。
总结
简单讲述了@Autowired
报错Could not autowire. No beans of 'XXX' type found的原因以及解决办法
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
谈谈Spring Boot 数据源加载及其多数据源简单实现(小结)
这篇文章主要介绍了谈谈Spring Boot 数据源加载及其多数据源简单实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-04-04基于Java的度分秒坐标转纯经纬度坐标的漂亮国基地信息管理的方法
本文以java语言为例,详细介绍如何管理漂亮国的基地信息,为下一步全球的空间可视化打下坚实的基础,首先介绍如何对数据进行去重处理,然后介绍在java当中如何进行度分秒位置的转换,最后结合实现原型进行详细的说明,感兴趣的朋友跟随小编一起看看吧2024-06-06Java中JDK14的新特性之JFR,JMC和JFR事件流(推荐)
JFR是一个基于事件的低开销的分析引擎,具有高性能的后端,可以以二进制格式编写事件,而JMC是一个GUI工具,用于检查JFR创建的数据文件。本文给大家介绍Java中JDK14的新特性之JFR,JMC和JFR事件流的相关知识,感兴趣的朋友一起看看吧2020-05-05
最新评论