Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Quarkus中带有@Inject和接口的依赖项注入_Java_Spring_Cdi_Quarkus - Fatal编程技术网

Java Quarkus中带有@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")

我正在尝试使用Quarkus 1.6.1.Final和OpenJDK 11使用存储库模式解决依赖项注入问题。 我想用接口实现Inject,并给它们一些参数(比如
@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版)
其他博客和SOs:

  • JpaRepository堆栈溢出的java-how注入实现
  • java-如何注入实现同一接口的两个不同类的两个实例堆栈溢出
  • javaee上下文和依赖注入@Qualifier

我猜您需要向
ProductStockDummyRepository
添加范围注释。可能是
@Singleton
@ApplicationScoped

哇。。。。。。是的,它起作用了。我错过了那个注释,花了2个多小时。谢谢你的回答,我真的很感激。