@ Alternative-only CDI bean

时间:2014-08-25 09:42:29

标签: cdi java-ee-7

我正在开发一个项目,其中包含两个可能的部署环境,使用@Alternative(或更具体地说是@Stereotype)注释进行选择。我们称之为envDefault和envAlt。 我正在寻找一种方法来定义一个bean,它具有为envAlt定义的@Alternative,但没有为envDefault实现@Default。我认为这是可行的,因为bean不会在任何常见实现中注入,并且导致其创建的操作(@Observes特定事件)将不会在envDefault中发生。然而,由于WeldStartService验证中典型的“不满意的限定符@Default”异常,CDI无法启动应用程序。

有没有办法放宽对这个特定bean的CDI验证,以允许在没有@Default实现的情况下进行envDefault部署?

编辑: 作为参考,已经回答:

interface AltOnlyInterface {}

@Alternative
class AltOnlyBean implements AltOnlyInterface {}

//no default implementation of AltOnlyInterface

interface OtherInterface {}

//AltOnlyInterface is not use in default environment
class RegularOtherBean implements OtherInterface {}

@Alternative
class AltOtherBean implements OtherInterface {

    @Inject
    AltOnlyInterface altOnlyBean;
}

1 个答案:

答案 0 :(得分:0)

如果没有默认实现,您应该:

  • 创建该实现

  • 将所有注入点设为实例

如果你想拥有两个环境,并且只有一个拥有该bean。您需要使用@Alternative注释bean并在一个环境中启用它。在第二个环境中,除非您在注射点有实例,否则它将失败。