@Inject 接口有两个实现

@Inject interface with two implementation

我正在使用 Microprofile,我有一个问题。我有一个接口,里面有一个方法:

public interface CheckData extends Serializable{
  MyObject retrieveData(String name);
}

此接口由 2 个不同的 classes(Class A 和 Class B)实现。

在服务中 class 我需要根据条件使用 class A 或 class B。

我做了接口的@Inject:

@ApplicationScoped
public class MyService{

@Inject
private CheckData checkData;

public Response manageData{

...

if(condition)
   checkData.retrieveData(name) // i needed Class A implementation

if(condition)
   checkData.retrieveData(name) // i needed Class B implementation

}  
}

如何指定要使用的实现?

我是这样解决的。 我创建了一个带有两个限定符的 class:

public class MyQualifier {
  @Qualifier
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
  public @interface ClassifierOne {
  }



  @Qualifier
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.FIELD, ElementType.TYPE,ElementType. METHOD})
  public @interface ClassifierTwo {
  }
}

后来我将限定符添加到实现接口的 classes:

@ClassifierOne
public class A implements CheckData{
...
}

@ClassifierTwo
public class B implements CheckData{
...
}

最后我注入了指定限定符的接口:

@Inject
@ClassifierOne
private CheckData myClassA;

@Inject
@ClassifierTwo
private CheckData myClassB;

希望是正确的,能帮到别人。

感谢@Turo 和@Asif Bhuyan 的支持