我有以下情况:
@Stateless
public class ProjectManager{
...
}
@Stateless
public class ProjectManagerForLargeProjects extends ProjectManager{
...
}
因此,当我尝试注入第二个管理器
时,这很好用@Inject
private ProjectManagerForLargeProjects pMFLP; // no problems, as expected
但是当我尝试注入基础ProjectManager时,容器不知道要选择哪个实现。
@Inject
private ProjectManager pM; // causes exception: WELD-001409 Ambiguous dependencies for type [ProjectManager] with qualifiers [@Default] at injection point ...
我知道我可以使用@Named来指定实现,但我只想说ProjectManager是ProjectManager的Default。 是不是有更简单的方法?
解决方案:我使用@EJB而不是@Inject,一切都按预期工作,但为什么?
答案 0 :(得分:2)
@EJB
在这里工作的原因和@Inject
不是每个注释如何查找依赖关系的工件。 EJB使用bean名称进行解析,而Inject使用类型层次结构。在这种特殊情况下,如果不使用限定符,Inject将无法使用。