SpringBoot的个别Autowired对象无法注入

叨叨

休了个小长假,时隔小半年,今天首开张,来记第一篇,中间还信誓旦旦地要开两个主题,自我巩固和学习呢,我信了你个鬼~~~~想起上学时,怎么把一大包作业背回家,就怎么背回来一样,书包都不曾打开。嗯,起题,说正篇(休了近5个月,手有点生,思路有点慢了),今天记录个小问题,送给有需要的同学们~

问题描述

springboot项目,引MongoDatabase(mongo驱动包中的对象)和Adminclient(kafkaclient中对象)提示无法注入【Could not autowire. No beans of ‘MongoDatabase’ type found. more… (Ctrl+F1)】,如下图所示
在这里插入图片描述
启动后报错如下【Consider defining a bean of type ‘org.apache.kafka.clients.admin.AdminClient’ in your configuration.】:
在这里插入图片描述

排除检查

  • 看springboot的启动类的路径,出错的类必须在启动类同一个包下面或者在启动类包的子包中,自我检查没有问题
    在这里插入图片描述
  • 检查pom文件中是否引入(第三方的jar包也都引入了,没有问题啊)
    在这里插入图片描述

在这里插入图片描述

  • 检查注解:
    注解也加入了,确定可以被扫描到在这里插入图片描述

问题确认

发现MongoDatabase是一上接口
在这里插入图片描述

Adminclient是一个抽象类
在这里插入图片描述
记着之前有看源码,抽象类和接口无法直接交由beanFactory去托管,无法直接通过反射实例化对象(具体请大家自行查找再确认哈),估测应该与此问题有问。

解决方案

根据启动时的异常提示去修改下 :
【Consider defining a bean of type ‘org.apache.kafka.clients.admin.AdminClient’ in your configuration】
创建config,然后自己通过bean注解配制,交由框架加 载托 管。参考代码如下图所示:
在这里插入图片描述
再去检查注情况,嗯,编译就 过了~~
在这里插入图片描述

就这样,大致写了一下,希望可以帮到遇到相同问题的你,以上内容仅供参考,具体问题还需要具体分析。

总结一下注解无法注入问题


 - springboot的默认装配规则是通它自身的启动类的所在包位置从上到小扫述的。所以要放好启动类的位置,通过是放置在最外层。比如说把启动类放在了com.zl.test,那么在这个路径下的所有类或子包都可以被加载到,但要是com.zl.common下就无法被扫描到了。如果有特别原在,不能放置在一起,需要手动在启动类中加扫描注解。
 - 要知道只有加了注解的类才会被spring加载,交由beanFactory管理,所以在使用注解的类和需要被注入的类 加入注解,eg :service上加了@Service的注解,想在control中注放service,那么需要在controller中也加上注解@Controller才可以
 - 还有一种情况要注意,就是new出来的类无法注入,这个点也是比较容易踩坑的
 - 然后就是我上面遇到的问题,需要自己手动@Bean了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值