0

我对 CDI 完全陌生。

我习惯于在 XML (Spring) 中配置 bean。在 CDI 中,我应该直接在类中配置它们吗?我有数十个具有相同实现但配置不同的 bean。

4

2 回答 2

4

CDI 混合使用注释和 xml 配置来配置部署中哪些 bean 处于活动状态。这是一个很大的话题,但我会尝试总结一下:

在您的 bean 实现中,您可以使用以下标准注释:

@Default
@Alterative
@Vetoed
@Specializes

除非不存在其他注释,否则假定 @Default

@Alternative bean 不活动,除非在 META-INF/beans.xml 中指定

@Vetoed bean 永远不会被认为是活跃的

@Specializes bean 将始终优先于它们的超类。

除了这些之外,您还可以创建自己的限定符来更准确地选择您想要的 bean 用于什么目的。

您将创建一个限定符作为注释,如下所示:

@Qualifier
@Retention(RUNTIME)
@Target({ TYPE, FIELD, PARAMETER, METHOD })
public @interface MyQualifier {
}

注意@Qualifier 和@Retention(RUNTIME) 注释。您还可以将参数添加到您的客户限定符。

我建议阅读 Weld 文档,它内容全面且写得很好:

焊接手册

于 2015-10-22T14:38:10.577 回答
2

是的,配置发生在代码中。在进行基于 XML 的配置方面已经进行了多次尝试,请查找 Seam Config。

对于您的数十个 bean,您通常会使用生产者方法来创建具有自己配置的各个实现。CDI 使用限定符而不是 bean id 来标识 bean。

于 2013-10-29T11:07:19.277 回答