我有两个类,A和B,需要使用服务。有两种服务,S1和S2。 S2延伸S1。我希望将S1注入A类,S2注入B类。如何在CDI中完成此操作?
public class S1 {}
public class S2 extends S1 {}
public class A {
@Inject S1 service; //Ambigious? Could be S1 or S2?
}
public class B {
@Inject S2 service;
}
答案 0 :(得分:3)
@Typed
注释启用restricting bean types,以便您可以写:
public class S1 {}
@Typed(S2.class)
public class S2 extends S1 {}
public class A {
@Inject S1 service;
}
public class B {
@Inject S2 service;
}
在您的部署中,bean类S2
的{{3}}将被限制为S2
和Object
,这样只有一个bean的bean类型包含S1
1}},模糊的解决方案将得到解决。
请注意,自CDI 1.0以来@Typed
注释可用。
您也可以依赖限定符,但最好使用功能语义的限定符。