在CDI中指定不同的子类实现

时间:2015-03-15 22:22:05

标签: java cdi weld

我有两个类,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;
}

1 个答案:

答案 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}}将被限制为S2Object,这样只有一个bean的bean类型包含S1 1}},模糊的解决方案将得到解决。

请注意,自CDI 1.0以来@Typed注释可用。

您也可以依赖限定符,但最好使用功能语义的限定符。