我的问题可能最好用一些示例代码来解释:
@Named
public class Search {
@Inject @Select(Type.SEARCH)
private Criteria criteria;
}
@Named
public class Selection {
@Inject @Select(Type.SELECTION)
private Criteria criteria;
}
public class Criteria {
private final List<Selection> statics;
private final List<Selection> choosables;
@Inject
public Criteria(
@Any Instance<List<Selection>> statics,
@Select(Type.CHOOSABLE) List<Selection> choosables,
InjectionPoint ip) {
Select sel = ip.getAnnotated().getAnnotation(Select.class);
this.statics = cloneList(statics.select(sel).get());
choosables = cloneList(choosables);
}
}
这个想法是Criteria
具有处理Selection
对象列表的所有逻辑,但是要管理的实际列表因Criteria
类的用户而异。就目前而言,Weld 抱怨无法找到具有匹配限定符的类,因为Criteria
is not annotated @Select
。那么-Criteria
无论@Select
资格赛如何,我都可以有资格注射吗?还是有另一种方法可以将该信息传递给Criteria
班级?
编辑:事实证明,这里已经以类似的形式提出了这个问题。