No qualifying bean of type ‘XXX‘ available
没有某类型的bean可供使用
- 问题一
- 解决方案
- 错误问题
- 配置类YuApiClientConfig
- 依赖导入
- 测试方法
- 问题二
- 解决方法
- 问题现场
- 问题解决
问题一
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.transbit.yuapiclientsdk.client.YuApiClient’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
解决方案
既然在配置类上面指定了@ComponentScan但是YuApiClient类上面是空的,也就是没有让spring容器托管,之后YuApiClinetConfig类中YuApiClient的构造方法上加了@Bean注解,所以只要config类被自动配置,那么starter启动后 容器中肯定有YuApiClient类,为什么没有呢?有一种可能就是这个类根本没被自动配置
查看META-INF/spring-factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration
包指定错误为org.springframework.boot.autoconfigurtion.EnableAutoConfiguration
能成功才算奇怪呢
错误问题
yuapi-client-sdk生成并导入到interface项目成功后,用test方法进行测试时,报错:No qualifying bean of type ‘XXX’ available:expected at least 1 bean which qualifies as autowire candidate
没有类型为“XXX”的合格bean可用:应至少有1个bean符合autowire候选者的条件
sdk配置类:
配置类YuApiClientConfig
依赖导入
interface项目xml文件导入依赖:
测试方法
Interface项目中的test方法:
报错信息: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘com.yupi.yuapiinterface.YuapiInterfaceApplicationTests’: Injection of resource dependencies failed
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1435)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:399)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:143)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:98)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:160)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.yupi.yuapiclientsdk.client.YuApiClient’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@jakarta.annotation.Resource(shareable=true, lookup=“”, name=“”, description=“”, authenticationType=CONTAINER, type=java.lang.Object.class, mappedName=“”)}
问题二
cn.hutool.core.io.IORuntimeException: ConnectException: Connection refused: connect
解决方法
hutool工具类连接拒绝,既然hutool发起的请求地址是http://localhost:8123/api/name
,那么排除地址的错误,就是看看该项目有没有启动,不要只是执行测试程序。
启动SpirngBootApplication程序后,再次执行测试方法通过