Quarkus构造器注入AuthManager时依赖解析失败求助
解决Quarkus中AuthManager构造注入的UnsatisfiedResolutionException问题
你遇到的问题本质是Quarkus的CDI容器找不到AuthManager类型的可用bean——把原来手动通过工厂创建实例的逻辑改成构造注入后,容器不知道该提供哪个具体实例来满足依赖。要让容器注入KeycloakFactoryAuth对应的AuthManager实例,可通过**生产者方法(Producer Method)**配置,具体步骤如下:
1. 创建AuthManager的生产者类
新建一个@ApplicationScoped类,用@Produces注解定义生成AuthManager实例的方法,完全复用你原来的工厂创建逻辑:
@ApplicationScoped public class AuthManagerProducer { @Produces public AuthManager produceAuthManager() { return AuthManagerFactory.getAuthManager(new KeycloakFactoryAuth()); } }
这个类会被Quarkus的CDI容器扫描到,当UserService需要注入AuthManager时,容器会自动调用该方法获取对应实例。
2. 保留现有UserService的构造注入逻辑
你的UserService代码无需修改,保持构造注入的写法即可:
@ApplicationScoped public class UserService { private AuthManager authManager; public UserService(AuthManager authManager) { this.authManager = authManager; } // 其他业务方法... }
此时Quarkus容器会自动识别AuthManager的生产者,解决依赖缺失问题,同时也满足单元测试需求——测试时只需提供Mock的AuthManager bean,即可覆盖生产者生成的实例。
补充说明
Quarkus确实支持无默认构造器、无@Inject注解的构造注入,但前提是构造器中的所有依赖类型都能被CDI容器找到对应的bean。你之前的报错就是因为AuthManager未被注册为CDI bean,容器无法解析该依赖。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

