带接口的EJB依赖注入

时间:2014-06-04 22:59:45

标签: java spring dependency-injection ejb

我有一个方法I的接口m和两个具体的实现AB

public interface I{
   public void m();
}
public class A implements I{
  public void m(){
    //
   }
}
public class B implements I{
    public void m(){
     //
    }
}

我想知道何时注入I将执行两种方法中的哪一种

@EJB
private I service;
///
service.m();
/////

2 个答案:

答案 0 :(得分:2)

它们都不会,因为应用程序服务器不知道要使用哪个实现,所以它会变成错误。为了避免这种情况,只需提供类实现的id,默认情况下该类的名称与类相同,但以小写字母开头:

//uncomment one of these
//@EJB(name="a")
//@EJB(name="b")
private I service;

答案 1 :(得分:0)

他们都不是。代码将编译,但您无法在应用程序服务器上部署它。如果没有指定注入类的类型,您将得到类似于此的异常:

org.jboss.weld.exceptions.DeploymentException:WELD-001409 Ambiguous dependencies
for type [...] with qualifiers [...] at injection point [...]. Possible dependencies
[...] with qualifiers [...], Managed Bean [...] with qualifiers [...]

容器(即您的应用程序服务器)无法识别您确实要注入哪个字段(A或B)。它不能凭空想出来。要避免这种错误,请为其提供注释(称为限定符),指定是否要注入A类或B类。如果您想要一个示例,您应该看到this article