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 빈 삽입 - Java 플랫폼, 엔터프라이즈판: Java EE 사용방법(예제)(릴리스 7) https://docs.oracle.com/javaee/7/tutorial/cdi-basic007.htm
다른 블로그 및 SO:
- java - JpaRepository의 구현을 주입하는 방법 - JpaRepository의 구현을 주입하는 방법
- java - 동일한 인터페이스를 구현하는 두 개의 서로 다른 클래스의 두 인스턴스를 주입하는 방법은 무엇입니까? - 스택 오버플 로 동일한 인터페이스를 구현하는 두 개의 다른 클래스의 두 인스턴스를 주입하는 방법은 무엇입니까?
- Java EE 컨텍스트 및 의존성 주입 @Qualifier https://memorynotfound.com/context-dependency-injection-qualifier/