【问题标题】:CDI bean configurationCDI bean 配置
【发布时间】:2013-10-29 09:27:34
【问题描述】:

我对 CDI 完全陌生。

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

【问题讨论】:

    标签: spring cdi


    【解决方案1】:

    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 文档,它内容全面且写得很好:

    Weld manual

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-10-10
        • 2015-04-11
        • 1970-01-01
        • 2015-04-20
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        相关资源
        最近更新 更多