在使用继承时如何将EJB定义为默认实现?

时间:2014-10-20 16:29:10

标签: java-ee ejb cdi ejb-3.1 inject

我有以下情况:

@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,一切都按预期工作,但为什么?

1 个答案:

答案 0 :(得分:2)

@EJB在这里工作的原因和@Inject不是每个注释如何查找依赖关系的工件。 EJB使用bean名称进行解析,而Inject使用类型层次结构。在这种特殊情况下,如果不使用限定符,Inject将无法使用。