Spring

Quarkus의 @Inject 및 Interface를 사용한 종속성 주입

기록만이살길 2022. 12. 18. 03:53
반응형

Quarkus의 @Inject 및 Interface를 사용한 의존성 주입

1. 질문(문제점):

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]

이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 아니면 이런 종류의 인터페이스 주입을 구현하고 인수/어노테이션으로 구체적인 클래스를 지정하는 것이 잘못된 생각입니까?

다음 기사를 읽고 시도했습니다.

일부 공식 문서:

다른 블로그 및 SO:

2. 해결방안:

내 생각에 범위 어노테이션을 추가해야 합니다 ProductStockDummyRepository. 아마 @Singleton또는 @ApplicationScoped.

반응형