Quarkus注入SpringBoot依赖类报UnsatisfiedResolutionException错误如何解决
错误原因
这个报错是Quarkus底层使用的CDI依赖注入容器无法找到对应类型的Bean导致的:
- Quarkus默认只会扫描当前项目中带有CDI作用域注解(如
@ApplicationScoped、@RequestScoped等)的类,将其注册为可注入的Bean - 你引入的第三方Spring Boot依赖中的
TestService没有标注任何CDI作用域注解,因此没有被CDI容器识别注册,注入时就会抛出UnsatisfiedResolutionException异常
解决方案
根据你是否能修改第三方依赖的代码,可选择对应方案:
方案1:可修改第三方依赖代码
直接给TestService类添加CDI的@ApplicationScoped注解即可,注意要使用javax.enterprise.context.ApplicationScoped,不要误用Spring的同名注解。
方案2:不可修改第三方依赖代码
使用CDI的@Produces生产者方法手动注册Bean,新建一个配置类如下:
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import com.test.model.TestService; @ApplicationScoped public class ThirdPartyBeanConfig { @Produces @ApplicationScoped public TestService produceTestService() { // 若TestService构造需要其他依赖,可先将依赖注入当前配置类,再构造实例 return new TestService(); } }
配置完成后CDI容器就能识别到TestService类型的Bean,可正常注入使用。
方案3:依赖中的类已加Spring组件注解
如果TestService类上已经标注了Spring的@Service、@Component等组件注解,可直接引入Quarkus的Spring DI兼容扩展,在build.gradle中添加如下依赖即可:
implementation 'io.quarkus:quarkus-spring-di'
引入扩展后Quarkus会自动识别Spring的组件注解,将对应类注册为CDI Bean,无需额外配置。
内容的提问来源于stack exchange,提问作者Abdullah Imran
相关产品推荐
相关产品推荐

