报错“Field pet in XXX.HelloController required a bean of type ‘XXX.Pet‘ that could not be found.“(代码片段
Posted 二木成林
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了报错“Field pet in XXX.HelloController required a bean of type ‘XXX.Pet‘ that could not be found.“(代码片段相关的知识,希望对你有一定的参考价值。
异常
2021-06-22 14:10:56.860 ERROR 17884 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field pet in com.demo.springboot.controller.HelloController required a bean of type 'com.demo.springboot.bean.Pet' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
The following candidates were found but could not be injected:
- Bean method 'pet' in 'MyConfig' not loaded because @ConditionalOnBean (names: user01; SearchStrategy: all) did not find any beans named user01
Action:
Consider revisiting the entries above or defining a bean of type 'com.demo.springboot.bean.Pet' in your configuration.
原因
我们来分析打印出来的错误日志:
我们查看HelloController类,在该类中注入了Pet类型的Bean组件,但是报错没有注入成功
那么我们点击左侧的箭头图标,去到注入这个组件的方法处,发现就是MyConfig类的pet()方法处,在这里使用@Bean注解注入了Pet组件。
但是我们使用了@ConditionalOnBean(name = "user01")注解在@Bean注解的上面,意思就是说必须在容器中存在一个名为"user01"的组件,才注入Pet组件,否则不进行注入。
解决
取消掉这个@ConditionalOnBean(name = "user01")注解,或者注入一个名为"user01"的组件。
但这么解决后还是报这个错,是什么原因呢?注意要被@ConditionalOnBean注解条件使用的bean组件应该在该注解的上面被声明,而不是在下面。
以上是关于报错“Field pet in XXX.HelloController required a bean of type ‘XXX.Pet‘ that could not be found.“(代码片段的主要内容,如果未能解决你的问题,请参考以下文章