@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 的支持
我正在使用 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 的支持