我是CDI的新手。
我用于在XML(Spring)中配置bean。在CDI中,我应该直接在类中配置它们吗?我有几十个具有相同实现但配置不同的bean。
答案 0 :(得分:4)
CDI使用注释和xml配置的混合来配置部署中哪些bean处于活动状态。这是一个很大的话题,但我会尝试总结一下:
在bean实现上,您可以使用以下标准注释:
@Default
@Alterative
@Vetoed
@Specializes
除非没有其他注释,否则假定@Default
除非在META-INF / beans.xml
中指定,否则@Alternative bean不活动@Vetoed bean永远不会被认为是活跃的
@Specializes bean将始终优先于其超类。
除了那些,你可以创建自己的限定符,以更准确地选择你想要的bean用于什么目的。
您可以将限定符创建为这样的注释:
@Qualifier
@Retention(RUNTIME)
@Target({ TYPE, FIELD, PARAMETER, METHOD })
public @interface MyQualifier {
}
请注意@Qualifier和@Retention(RUNTIME)注释。 您还可以向客户限定符添加参数。
我建议给Weld文档一个阅读,它是全面的,写得很好:
答案 1 :(得分:2)
是的,配置在代码中发生。已经有几次尝试进行基于XML的配置,寻找Seam Config。
对于您的数十个bean,您通常会使用生产者方法来创建具有自己配置的各个实现。 CDI使用限定符而不是bean id来识别bean。