解决方案 --[restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :

举报
中杯可乐多加冰 发表于 2022/11/28 17:08:27 2022/11/28
【摘要】 问题描述:Error starting ApplicationContext. To display the conditions report re-run your application with ‘debug’ enabled.ERROR 9680 — [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter 问题分析这个问题...

问题描述:

Error starting ApplicationContext. To display the conditions report re-run your application with ‘debug’ enabled.
ERROR 9680 — [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter

问题分析

这个问题在网上找到很多方法,多半都是删除某某依赖,或者更改依赖版本,或者添加:(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})

但是笔者使用上述方法后仍然不管用,依然存在这个问题。

在这上面debug弄了一个小时,这时候,终于想起来看看IDEA的错误提示
给的提示是:

Description:

Field userRepository in com.example.usermanag.service.UserServiceImp required a bean of type
‘com.example.usermanag.repository.UserRepository’ that could not be found.

The injection point has the following annotations:

  • @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type
‘com.example.usermanag.repository.UserRepository’ in your configuration.

仔细阅读,可以发现关键在The injection point has the following annotations: @org.springframework.beans.factory.annotation.Autowired(required=true)这句话。

笔者回溯代码时才发现有个地方用了@Autowired 进行自动注入,查阅官方文档和其他博客,发现错误的原因在于:
spring framerwork 4.0以后就不推荐使用属性注入,改为推荐构造器注入和setter注入,因为属性注入方式容易出现循环依赖问题,即A注入B,B注入C,C注入A,这种情况很容易会报异常。

解决方案

法一:将@Autowired 改为 @Qualifier 进行注入

法二:将@Autowired 改为setter方式注入

法三:老老实实new对象,不使用自动注入

法四:应该还是可以继续以另外的方式使用@Autowired(这点暂时笔者也不会,等待各位补充)

类似错误但是是其他问题:请一定要看错误信息

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。