在 CDI 中指定不同的子类实现
Specifying different subclass implementations in CDI
我有两个class,A和B,需要使用一个服务。有两个服务,S1 和 S2。 S2 扩展 S1。我希望将 S1 注入 class A 并将 S2 注入 class 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;
}
@Typed
annotation enables 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 class S2
的 beans types 将被限制为 S2
和 Object
因此只有一个 bean bean类型包含类型S1
,将解决歧义解析。
请注意,@Typed
注释自 CDI 1.0 起可用。
您也可以依赖限定词,尽管最好使用限定词 功能性 语义。
我有两个class,A和B,需要使用一个服务。有两个服务,S1 和 S2。 S2 扩展 S1。我希望将 S1 注入 class A 并将 S2 注入 class 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;
}
@Typed
annotation enables 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 class S2
的 beans types 将被限制为 S2
和 Object
因此只有一个 bean bean类型包含类型S1
,将解决歧义解析。
请注意,@Typed
注释自 CDI 1.0 起可用。
您也可以依赖限定词,尽管最好使用限定词 功能性 语义。