【发布时间】:2014-12-15 17:15:28
【问题描述】:
我有以下情况:
@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 的默认值。 没有更简单的方法吗?
解决方案:我使用了@EJB 而不是@Inject,一切正常,但为什么呢?
【问题讨论】:
-
使用单独的接口。顺便说一句,我认为您遇到的问题是代码异味的强烈迹象。
-
嗯,我们正在使用一个 jee api,它提供了一个具有一些功能的无状态 bean,我们想添加一些功能......在我看来是经典继承,我不会在 JEE 中这样做吗?
-
如果组合不是您的选择,最好为这里的两个用例使用两个单独的接口(或通过限定符明确区分)。
标签: jakarta-ee ejb cdi ejb-3.1 inject