当前位置: 代码网 > it编程>编程语言>Java > 解决@Autowired报错Could not autowire. No beans of ‘XXX‘ type found问题

解决@Autowired报错Could not autowire. No beans of ‘XXX‘ type found问题

2024年12月14日 Java 我要评论
背景idea中使用@autowired报错could not autowire. no beans of 'xxx' type found.错误大致意思为:没有匹配到类型为xxx的be

背景

idea中使用@autowired报错

could not autowire. no beans of 'xxx' type found.

错误大致意思为:

没有匹配到类型为xxx的bean。

原因

个人觉得,注入controllerservice虽然一般来说我们都是注入一个接口,但是该接口有实现类,并且使用@service进行关联,所以注入类型应该也可以视为一个类,但是mybatis仅需提供dao接口,也就是说,注入servicedao只是一个接口,而没有实现类,虽然mybatis能够通过dao接口和xml文件实现与数据库的操作,但是@autowired并没有这个识别功能,可能它就认为你类型不匹配,无法使用通过类型注入的方法。

解决方法

  1. 在相应mapper中加上@component注解
  2. 检查service层有没有加入@service注解,若无则加上
  3. 使用@resource注解代替@autowired注解
  4. @autowired(required = false) 设置required 属性值为 false,错误提示消失。
  5. 在相应的dao层加入@repository注解

@autowired和@resource的区别

  • @resource和@autowired注解都是用来实现依赖注入的。只是@autowriedby 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的原因以及解决办法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com