开发者社区> 问答> 正文

spring为何要注入接口,而注入接口的实现类就会报错?报错

@Controller
public class test {
	@Autowired
	private RoleDao rdi;

这样注入就没有问题,

而注入

@Controller
public class test {
	@Autowired
	private RoleDaoImpl rdi;



会报错:No qualifying bean of type [com.wonhoo.dao.impl.RoleDaoImpl] found for dependency


别人说是spring的接口编程规范,硬性规定,求解释



展开
收起
爱吃鱼的程序员 2020-06-14 19:13:42 798 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    把implementsRoleDao从RoleDaoImpl删掉,然后试试:

    @Autowired
    privateRoleDaoImplrdi;

    你也可以设个断点,看看 rdi的类型
    用接口的情况下应该是:$ProxyN
    不用接口的情况应该是:<spanstyle="color:#444444;font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">RoleDaoImpl$$EnhancerBySpringCGLIB$$??????不用接口的情况,RoleBaoImpl是“null”,求解释!!!接口实现类的默认组件名字就是接口名,@Autowired没有指定名字,默认使用引用类的类名,这样就不存在一个RoleDaoImpl为名字的组件类这不是硬性规定,只是默认缺省规定而已,想怎么改都行回复<aclass='referer'target='_blank'>@koik:大小写?首字母小写@Resource(name="RoleDao")privateRoleDaoImplrdi;这样给他制定了组件,为何还是报一样的错啊。是不是因为没有加cglib?都可以,只是你用错了。你的实现类是否添加了spring依赖注入?

    2020-06-14 19:14:00
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载