Java Quarkus中带有@Inject和接口的依赖项注入
我正在尝试使用Quarkus 1.6.1.Final和OpenJDK 11使用存储库模式解决依赖项注入问题。 我想用接口实现Inject,并给它们一些参数(比如Java Quarkus中带有@Inject和接口的依赖项注入,java,spring,cdi,quarkus,Java,Spring,Cdi,Quarkus,我正在尝试使用Quarkus 1.6.1.Final和OpenJDK 11使用存储库模式解决依赖项注入问题。 我想用接口实现Inject,并给它们一些参数(比如@Named或@Qualifier)来指定具体的类,但目前我得到了未满足的解决方案异常,不确定如何修复它 下面是我的代码部分 用例类: @ApplicationScoped public class ProductStockCheckUseCase { @Inject @Named("dummy")
@Named
或@Qualifier
)来指定具体的类,但目前我得到了未满足的解决方案异常
,不确定如何修复它
下面是我的代码部分
用例类:
@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;
}
}
这是我构建的一部分。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 assembly
或/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-上下文和依赖注入
- JSR365:Java2.0的上下文和依赖注入
- 按需与CDI和EJB3.1接口
- 23.7注入bean-Java平台,企业版:JavaEE教程(第7版)
- JpaRepository堆栈溢出的java-how注入实现
- java-如何注入实现同一接口的两个不同类的两个实例堆栈溢出
- javaee上下文和依赖注入@Qualifier
ProductStockDummyRepository
添加范围注释。可能是@Singleton
或@ApplicationScoped
哇。。。。。。是的,它起作用了。我错过了那个注释,花了2个多小时。谢谢你的回答,我真的很感激。