【问题标题】:@Alternative-only CDI bean@Alternative-only CDI bean
【发布时间】:2014-08-25 09:42:29
【问题描述】:

我正在开发一个具有两个可能部署环境的项目,使用@Alternative(或更具体地说,@Stereotype)注释选择。我们称它们为 envDefault 和 envAlt。 我正在寻找一种方法来定义一个为 envAlt 定义了 @Alternative 但没有为 envDefault 实现 @Default 的 bean。我认为这是可行的,因为 bean 没有注入任何常见的实现,并且导致其创建的操作(它 @Observes 特定事件)不会在 envDefault 中发生。然而,由于 WeldStartService 验证时出现典型的“Unsatisfied dependencies with qualifier @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;
}

【问题讨论】:

  • 您能否发布一个示例,说明您如何注释这些类并禁用真正的错误消息?您是否在 beans.xml 中启用了任一替代方案?

标签: cdi java-ee-7


【解决方案1】:

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

  • 创建该实现

  • 将所有注入点设为实例

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

【讨论】:

  • 好的,所以这里不能放宽 CDI 验证。我想使用 Instance 比实现一些不会在任何地方使用的 DummyDefault bean 更干净。谢谢!
猜你喜欢
  • 2012-08-23
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 2011-07-27
  • 1970-01-01
相关资源
最近更新 更多