问题描述
我正在尝试使用Quarkus 1.6.1.Final和OpenJDK 11通过Repository Pattern解决依赖项注入。
我想通过接口实现注入,并给他们一些参数(例如@Named
或@Qualifier
)来指定具体的类,但是目前我有UnsatisfiedResolutionException
并不确定如何解决它
这是我的代码部分。
UseCase类:
@ApplicationScoped
public class ProductStockCheckUseCase {
@Inject
@Named("dummy")
ProductStockRepository repo;
public int checkProductStock() {
ProductStock stock = repo.findBy("");
return stock.getCount();
}
}
存储库接口:
public interface ProductStockRepository {
public ProductStock findBy(String productId);
}
存储库实施:
@Named("dummy")
public class ProductStockDummyRepository implements ProductStockRepository {
public ProductStock findBy(final String productId) {
final ProductStock productStock = new ProductStock();
return productStock;
}
}
这是我的build.gradle依赖项的一部分:
dependencies {
implementation 'io.quarkus:quarkus-resteasy'
implementation 'io.quarkus:quarkus-arc'
implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.rest-assured:rest-assured'
}
运行此命令(例如./gradlew assemble
或./gradlew quarkusDev
)时,出现以下错误:
Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type ProductStockRepository and qualifiers [@Named(value = "dummy")]
- java member: ProductStockCheckUseCase#repo
- declared on CLASS bean [types=[ProductStockCheckUseCase,java.lang.Object],qualifiers=[@Default,@Any],target=ProductStockCheckUseCase]
您是否有解决办法?还是实现这种接口注入并使用参数/注释指定具体类是错误的主意?
我已经阅读并尝试了以下文章:
一些官方文档:
- Quarkus-上下文和依赖注入https://quarkus.io/guides/cdi-reference
- JSR 365:Java 2.0 https://docs.jboss.org/cdi/spec/2.0/cdi-spec.html#default_bean_discovery的上下文和依赖注入
- 与CDI和EJB 3.1 https://www.oracle.com/technical-resources/articles/java/intondemand.html的按需接口
- 23.7注入Bean-Java平台,企业版:Java EE教程(第7版)https://docs.oracle.com/javaee/7/tutorial/cdi-basic007.htm
其他博客和SO:
- java-如何注入JpaRepository的实现-堆栈溢出how inject implementation of JpaRepository
- java-如何注入实现同一接口的两个不同类的两个实例? -堆栈溢出How to inject two instances of two different classes which implement the same interface?
- Java EE上下文和依赖项注入@Qualifier https://memorynotfound.com/context-dependency-injection-qualifier/
解决方法
我的猜测是您需要向ProductStockDummyRepository
添加范围注释。可能是@Singleton
或@ApplicationScoped
。