【发布时间】:2018-05-23 12:31:21
【问题描述】:
我想编写可以在运行时注入的通用验证器对象,选择一个具体类型的 bean 进行验证,但我无法让注入工作。以下是接口类:
public interface GenericValidator<T> {
String getConfigurationCode();
ErrorMessages validate(T toValidate);
}
public class GenericValidatorConstructor<T> {
@Inject
private Instance<GenericValidator<T>> delegators;
public List<GenericValidator<T>> getValidatorsByConfig(String configCode) {
List<GenericValidator<T>> result = new ArrayList<GenericValidator<T>>();
for (GenericValidator<T> validator : delegators) {
if (configCode != null && configCode.equals(validator.getConfigurationCode()) ) {
result.add(validator);
}
}
return result;
}
}
然后我实现了一个带有这样的字符串引用的具体类:
@Override
public String getConfigurationCode() {
return "GENERIC_PASSWORD";
}
@Override
public ErrorMessages validate(String toValidate) {
return null;
}
在一个无状态的 ejb 中我以这种方式注入
@Inject
private GenericValidatorConstructor<String> passwordValidatorConstructor;
然后调用方法
passwordValidatorConstructor.getValidatorsByConfig("GENERIC_PASSWORD");
但在getValidatorsByConfig Instance<GenericValidator<T>> 委托人内部是一个空集合,我不知道为什么。我错过了什么?
【问题讨论】:
标签: java cdi inject generic-type-argument