【发布时间】:2020-12-04 08:14:58
【问题描述】:
我正在尝试使用 Quarkus 1.6.1.Final 和 OpenJDK 11 通过存储库模式解决依赖注入问题。
我想实现 Inject with Interface 并给他们一些参数(如 @Named 或 @Qualifier )以指定具体类,但目前我有 UnsatisfiedResolutionException 并且不知道如何修复它。
这是我的部分代码。
用例类:
@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/
【问题讨论】: